求最大回文子串問題

2021-07-31 06:32:12 字數 1177 閱讀 9665

catcher是mca國的情報員,他工作時發現敵國會用一些對稱的密碼進行通訊,比如像這些abba,aba,a,123321,但是他們有時會在開始或結束時加入一些無關的字元以防止別國破解。

比如進行下列變化 abba->12abba,aba->abakk,123321->51233214 。因為截獲的串太長了,而且存在多種可能的情況(abaaab可看作是aba,或baaab的加密形式),

cathcer的工作量實在是太大了,他只能向電腦高手求助,你能幫catcher找出最長的有效密碼串嗎?

輸入描述:

輸入乙個字串

輸出描述:

返回有效密碼串的最大長度

輸入例子:

abba

輸出例子:

4

void longestpalindrome_2(string str)

int len = s1.size();

int id = 0, index = 0,maxlen = 0;

vector

vi(len, 0);

for (int i = 2; i < len; ++i)

else

//情況3

while (s1[i - vi[i]] == s1[i + vi[i]]) ++vi[i]; //往兩邊擴充套件

if (vi[id] + id < i + vi[i])

if (maxlen < vi[i])

}for (int i = index - (maxlen - 1) + 1; i <= index + (maxlen - 1) - 1; i+=2)

cout

<< res.size() << endl;

}int main()

return

0;}

void longestpalindrome_1(string str)

for (int i = 0; i < str.size(); ++i)

--j;}}

cout << maxlen << endl;

}

只可惜動態規劃的辦法空間,時間消耗很大,沒能過的了華為的oj!

但是很好理解啊!**量也很小!

有時間一定要多看看動態規劃的演算法思想,很多時候,覺得自己懂了,面對問題的時候還是寫不出來,很氣!

求最大回文子字串

題目出處 回文字串 簡單點說就是字串反轉 reverse 後的結果還是自己。如 abcba abccba 返轉後的結果是一樣的。最簡單的回文字串是空字串及長度為1的字串。題目要求,給乙個字元,可以假設最大長度的1000.查詢最大回文子字串。並返回乙個。解決方法 遍歷字串 假設當前位置就做為回文字串的...

最大回文子串行 最大回文子串

最大回文子串行,例如cafgfkc,最大回文子串行cfgfc,輸出5。子串行相當於刪除某些位置上的字元後形成的序列。最大回文子串,例如cafgfkc,最大回文子串fgf,輸出3。子串相當於擷取start位到end位的子串。試過沒認真看題目,原題是求子序列,想當然以為求子串,直接高高興興用manach...

最大回文子串

輸入乙個字串,求出其中最大回文子串的長度。子串的含義是 在原串中連續出現的字串片段。回文的含義是 正著看和倒著看相同,如abba和yyxyy。在判斷時,應該忽略所有標點符號和空格,且忽略大小寫,但輸出應保持原樣 在回文串的首部和尾部不要輸出多餘字元 include string include io...