<p>Given a string <code>s</code>, return <em>the number of <strong>unique palindromes of length three</strong> that are a <strong>subsequence</strong> of </em><code>s</code>.</p>

<p>Note that even if there are multiple ways to obtain the same subsequence, it is still only counted <strong>once</strong>.</p>

<p>A <strong>palindrome</strong> is a string that reads the same forwards and backwards.</p>

<p>A <strong>subsequence</strong> of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.</p>

<ul>
	<li>For example, <code>&quot;ace&quot;</code> is a subsequence of <code>&quot;<u>a</u>b<u>c</u>d<u>e</u>&quot;</code>.</li>
</ul>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;aabca&quot;
<strong>Output:</strong> 3
<strong>Explanation:</strong> The 3 palindromic subsequences of length 3 are:
- &quot;aba&quot; (subsequence of &quot;<u>a</u>a<u>b</u>c<u>a</u>&quot;)
- &quot;aaa&quot; (subsequence of &quot;<u>aa</u>bc<u>a</u>&quot;)
- &quot;aca&quot; (subsequence of &quot;<u>a</u>ab<u>ca</u>&quot;)
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;adc&quot;
<strong>Output:</strong> 0
<strong>Explanation:</strong> There are no palindromic subsequences of length 3 in &quot;adc&quot;.
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> s = &quot;bbcbaba&quot;
<strong>Output:</strong> 4
<strong>Explanation:</strong> The 4 palindromic subsequences of length 3 are:
- &quot;bbb&quot; (subsequence of &quot;<u>bb</u>c<u>b</u>aba&quot;)
- &quot;bcb&quot; (subsequence of &quot;<u>b</u>b<u>cb</u>aba&quot;)
- &quot;bab&quot; (subsequence of &quot;<u>b</u>bcb<u>ab</u>a&quot;)
- &quot;aba&quot; (subsequence of &quot;bbcb<u>aba</u>&quot;)
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>3 &lt;= s.length &lt;= 10<sup>5</sup></code></li>
	<li><code>s</code> consists of only lowercase English letters.</li>
</ul>

class Solution:
    def countPalindromicSubsequence(self, s: str) -> int:
        left = set()
        right = Counter(s)
        res = set()
        for i in range(len(s)):
            right[s[i]]-=1
            if right[s[i]] == 0:
                right.pop(s[i])
            for j in range(26):
                ch = chr(ord("a") + j)
                if ch in left and ch in right:
                    res.add((s[i],ch))
            left.add(s[i])
        return len(res)













        left = set()

        right = Counter(s)
        res = set()
        for i in range(len(s)):
            right[s[i]]-=1
            if right[s[i]] == 0:
                right.pop(s[i])
            for j in range(26):
                ch = chr(ord("a") + j)
                if ch in left and ch in right:
                    res.add((s[i],ch))
            left.add(s[i])
        return len(res)




















        left = set()
        right = Counter(s)
        res = set()

        for i in range(len(s)):
            right[s[i]] -=1
            if right[s[i]]==0:
                right.pop(s[i])
            for j in range(26):
                c = chr(ord("a")+j)
                if c in right and c in left:
                    res.add((s[i],c))
            left.add((s[i]))
        return len(res) 




























        left = set()
        right = Counter(s)
        res = set()

        for i in range(len(s)):
            right[s[i]] -=1
            if right[s[i]] == 0:
                right.pop(s[i])
            for j in range(26):
                c = chr(ord('a')+j)
                if c in right and c in left:
                    res.add((s[i],c))
            left.add(s[i])
        return len(res) 





































        left = set()
        right = Counter(s)
        res = set()

        for i in range(len(s)):
            right[s[i]]-=1
            if right[s[i]] == 0:
                right.pop(s[i])
            for j in range(26):
                c = chr(ord('a')+j)
                if c in left and c in right:
                    res.add((s[i],c))
            left.add(s[i])
        return len(res)



























        
        left = set()
        right = collections.Counter(s)
        res = set()
        for i in range(len(s)):
            right[s[i]]-=1
            if right[s[i]] == 0:
                right.pop(s[i])
            for j in range(26):
                c = chr(ord("a")+j)
                if c in left and c in right:
                    res.add((c,s[i]))
            left.add(s[i])
        return len(res)


































        res = set()
        left = set()
        right = collections.Counter(s)
        for i in range(len(s)):
            right[s[i]]-=1
            if right[s[i]] == 0:right.pop(s[i])
            for j in range(26):
                c = chr(ord("a") +j)
                if c in right and c in left:
                    res.add((s[i],c))
            left.add(s[i])
        return len(res)

        
        






























        res = set()
        left = set()
        right = collections.Counter(s)
        for i in range(len(s)):
            right[s[i]]-=1
            if right[s[i]] == 0:
                right.pop(s[i])
            for j in range(26):
                c=chr(ord('a')+j)
                if c in right and c in left:
                    res.add((s[i],c))
            left.add(s[i])
        return len(res)

        
































        res = set()
        left = set()
        right = collections.Counter(s)

        for i in range(len(s)):
            right[s[i]]-=1
            if right[s[i]] == 0:
                right.pop(s[i])
            for j in range(26): 
                c = chr(ord('a')+j)
                if c in left and c in right:
                    res.add((s[i],c))
            left.add(s[i])
        return len(res)






























        res = set()
        left = set()
        right = collections.Counter(s)
        
        for i in range(len(s)):
            right[s[i]]-=1
            if right[s[i]] == 0:
                right.pop(s[i])
            for j in range(26):
                c = chr(ord('a') + j) 
                if c in left and c in right:
                    res.add((s[i],c))
            left.add(s[i])
        return len(res)
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        """
        d = {}
        for i in s:
            if i not in d:
                d[i] = 1
            else:
                d[i]+=1
        count = 0
        for i,val in d.items():
            if val>=2:
                count+=1
            else:
                count+=val
        return count


        """
17900