牛客-小A的迴文串(最長迴文串,馬拉車算法)

題目:題目鏈接
小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;
發佈了17 篇原創文章 · 獲贊 8 · 訪問量 2306
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章