求乙個字串的最大回文字首長度。回文是指正反方向讀起來都一樣的字串,比如「abcdcba」就是乙個回文。
那麼abccba的長度為6。列子2:10010的回文長度為4。列子3:sogou的回文長度是1,因為就乙個a。
這個題目是求回文字首的長度,因為是字首所以意思就是從第乙個字元開始如果有回文的話,這個回文長度為多少。那麼有倆種演算法都是o(n2),第一種從頭遍歷,第二種從尾遍歷。n的平方是根據,這樣來的,對於第一種情況字串全是同乙個字元的話,那麼每次都要求回文所以是n的平方。對於第二種abaaaaa,這種情況也是每次都要求回文也是n的平方,雖然回文是1。
差別在於第二種最優為o(n)
我是這樣想的,先遍歷字串,如果遇見與第乙個字元相等的字元的話,我們先看下這個字元是否是回文,如果是回文返回長度。不是繼續遍歷。
第一種遍歷的話,如果第乙個子串是回文,那麼我們如果在後面在遇到了與第乙個字元相等的字元的話,還是要看下新的子串是否是回文。
第二種遍歷的話,如果第乙個子串是回文直接結束,如果不是的話繼續從上一次的end位置往後面遍歷。
#include
#include
#include
using
namespace
std;
int fun(char*start, char*end)
else
}return ret;
}int main()
if (ret>1) break;
end--;
}cout
<< ret << endl;
return
0;}
最大回文字串
題目描述 輸入乙個字串,求出其中最長的回文。回文 正著看和倒著看相同,如abba和yyxyy 在判斷時,應該忽略所有標點符號和空格,且忽略大小寫,但輸出應保持原樣。輸入字串的長度不超過5000,且佔據單獨的一行。ying g輸出最長的回文串,如果有多個,輸出起始位置最左邊的。樣例輸入 confuci...
最大回文字串長度 manacher演算法
參考 題目 hdu3068 hdu3068.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include using namespace std int longestpdr vector vc for int i 0 i rd...
C計算最大回文字串的長度
題目 輸入乙個字串和長度,求最大回文字串的長度 分析 manacher演算法 在原串中插入特殊字元 串中沒有的字元 就能把偶數長的串變成奇數 然後求乙個序列p,p i 為以i為中心,最長的回文串左端到i距離。在計算p i 時,假設之前求得的串的右端最右的乙個的中心為id,它的右端為mx,那麼從i向左...