找到字符串里所有回文字串

【题目描述】
给定一个字符串s,找到s中的所有回文子串(Palindromic Substring);
只需输出回文子串的数目,并去掉重复的子串。

【输入格式】
一行,字符串s

【输出格式】
一个数字,表示回文子串个数

【样例输入】
bb
bca
aa

(没有空行 发布不让三个a或者三个b连在一起)
【样例输出】
7
【样例解释】
一共7个不重复的回文子串
【数据范围】
对于100%的数据:1<=|s|<=5000,且s仅仅含有小写字母。

#include <iostream>
#include <string.h>
#include <set>
using namespace std;
 
bool IsPalindromicStr(string str) {
    for (int i = 0; i < str.size()/2; ++i) {
        if (str[i] != str[str.size() - 1 - i]) return false;
    }
    return true;
}
int countPalindromicSubstr(string str) {
    set<string> s;
    for (int i = 0; i<str.size(); i++) {
        for (int j = 1; j< str.size()+1-i; j++) {
            string substring = str.substr(i, j);
            if (IsPalindromicStr(substring)) {
                s.insert(substring);
            };
        }
    }
    return s.size();
}

int main()
{
    string testStr;
    cout << "Enter string: " << endl;
    cin >> testStr;
    cout << countPalindromicSubstr(testStr) << endl;
}

bbbcaaa怎么会有7个不重复的回文字串呢???单个字符算不算啊?

#include<iostream>
using namespace std;

#include <vector>
#include <string>


void rev(string &s)
{
    int len = s.size();
    for(int i=0;i<len/2;i++)
    {
        char c = s[i];
        s[i] = s[len-i-1];
        s[len-i-1] = c;
    }
}
int main()
{
    vector<string> vs;
    string s,s1,s2;
    cin>>s;
    for(int i=1;i<=s.size();i++)
    {
        for(int j=0;j<=s.size()-i;j++)
        {
            s1=s2=s.substr(j,i);
            rev(s1);
            if(s1==s2)
            {
                vector<string>::iterator it;
                for(it = vs.begin();it != vs.end();it++)
                {    
                    if(*it == s1)
                        break;
                }
                if(it == vs.end())
                    vs.push_back(s1);
            }
        }
    }
    printf("%d",vs.size());
    return 0;
}