題目:題目鏈接
小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;