题目描述

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

("回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。)

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。

可用C++,Java,C#实现相关代码逻辑

输入描述:

输入一个字符串S 例如“aabcb”(1 <= |S| <= 50), |S|表示字符串S的长度。

输出描述:

符合条件的字符串有"a","a","aa","b","c","b","bcb"

所以答案:7

示例1

输入

复制

aabcb
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool Judge(string& A){
string B = A;
reverse(B.begin(),B.end());
return A == B;
}

int main()
{
string Input;
cin >> Input;
int Length = Input.length();
vector<int> dp(Length,0);
dp[0] = 1;
for(int i = 1;i < Length;i ++){
dp[i] = dp[i - 1] + 1;
for(int j = 0;j < i;j ++){
string tmp = Input.substr(j,i - j + 1);
if(Judge(tmp)){
dp[i] ++;
}
}
}
printf("%d\n",dp[Length - 1]);
return 0;
}