#include <bits/stdc++.h>
using namespace std;
int dp[50][50];
string str = "abbcbdffd";
//中心法
int func1(string s)
{
int n = s.length();
if(n==0)
return 0;
int res = 0;
for(int i=0; i<n; ++i)
{
for(int j=0; i-j>=0 && i+j<n; ++j)
{
if(s[i+j] == s[i-j])
{
res++;
//cout<<s.substr(i-j,2*j+1)<<endl;
}
else
break;
}
for(int j=0; i-j-1>=0 && i+j<n; ++j)
{
if(s[i+j] == s[i-j-1])
{
res++;
//cout<<s.substr(i-j-1,2*(j+1))<<endl;
}
else
break;
}
}
return res;
}
//动态规划
int func2(string s)
{
int n = s.length();
if(n==0)
return 0;
int res = 0;
for(int i=n-1; i>=0; --i)
{
for(int j=i;j<n; ++j)
{
dp[i][j] = (s[i]==s[j] &&(j-i<3 || dp[i+1][j-1]));
if(dp[i][j])
res++;
}
}
return res;
}
int main()
{
cout<<func1(str)<<endl;
cout<<func2(str)<<endl;
return 0;
}
求给定字符串回文子串的个数
最新推荐文章于 2022-10-20 22:44:10 发布