
关键就是去重,暴力没啥好说明的
cpp
class Solution {
public:
int countPalindromicSubsequence(string s) {
int ans = 0;
int n = s.size();
for (char i = 'a';i <= 'z';i++)//穷尽所有字母
{
int l= 0;
int r = n - 1;
while (l < n && s[l] != i)//找到左边第一个等于s[i]的下标
{
l++;
}
while (r > 0 && s[r] != i)//找到右边边第一个等于s[i]的下标
{
r--;
}
if (l >= r)//没找到跳过
{
continue;
}
//计算回文范围内不重复的字母数量 因为 在"bbcbaba"中,当i枚举到b则l=0,r=5,bbb与bbb算同一个子序列所以,在l和r去重后统计其中的字母数量
//这里直接把l和r期间的值放入unordered_set在返回长度即可
unordered_set<int>setf;
for (int k = l + 1;k < r;k++)
setf.insert(s[k]);
ans += setf.size();
}
return ans;
}
};