题目描述
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
("回文串”是一个正读和反读都一样的字符串,比如“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;
}
来源:https://blog.csdn.net/qq_35747066/article/details/99878018