<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 {
public:
    void findCount(unordered_map<char, int> &indexMap, char ch, unordered_set<string> &st, unordered_map<char, int> &lastIndexMap) {
        int index = indexMap[ch];
        for (auto it : indexMap) {
            char tempCh = it.first;
            int lastIndex = lastIndexMap[tempCh];
            int chIndex = it.second;
            if (ch != tempCh) {
                if (lastIndex > index) {
                    string temp;
                    temp.push_back(ch);
                    temp.push_back(tempCh);
                    st.insert(temp);
                }
            }
        }
    }
    int countPalindromicSubsequence(string s) {
        unordered_map<char, int> freqMap, indexMap, lastIndexMap;
        unordered_set<string> st;
        int ans = 0;
        for (int i = 0; i < s.length(); i++) {
            freqMap[s[i]]++;
            lastIndexMap[s[i]] = i + 1;
            if (indexMap[s[i]] == 0) {
                indexMap[s[i]] = i + 1;
                continue;
            }
            else {
                findCount(indexMap, s[i], st, lastIndexMap);
            }
        }

        for (auto it : freqMap) {
            if (it.second >= 3) {
                ans++;
            }
        }

        return ans + st.size();
    }
};
18611