题目:题目链接
小A只想知道给定的一个字符串的最大回文子串是多少,。现在小A可以对这个字符串做一些改动,他可以把这个字符串最前面的某一段连续的字符(不改变顺序)移动到原先字符串的末尾。那么请问小A通过这样的操作之后(也可以选择不移动)能够得到最大回文子串的长度是多少。
思路:
1 枚举所有字串 使用马拉车算法
2 枚举起点和终点 利用动态规划的思想
思路一:待补齐
思路二:
/*枚举起点和终点 字符串前面+" "是必须的
string ss;cin>>ss;
int len = ss.size();
string s = " "+ss+ss;
int ans = 1; //如果设置为-1 会报错
for(int i=1;i<=len;i++) //起点
{
for(int j=i+1;j<=len+i-1;j++) //终点
{
if(s[i]==s[j])
{
d[i][j]=d[i-1][j+1]+2;
if(j-i==2) d[i][j]++;
} //只有当这个距离是才是判断是否是回文串
if(j-i==1||j-i==2) ans=max(ans,d[i][j]);
}
}
cout<<ans<<endl;