回文串是指aba、abba、cccbccc、aaaa這種左右對稱的字串。
輸入乙個字串str,輸出str裡最長回文子串的長度。
input
輸入str(str的長度 <= 1000(第二題要求為100000))
output
輸出最長回文子串的長度l。
input示例
daabaac
output示例
5
解:
1 #include 2
3 int main()
4 21 printf("%d\n", max);
22 }
23 }
後來找了一些其他的解法,比較著名的是manacher演算法,它通過插入「#」的方式將我程式中的兩類討論變為了一種情況,避免了分類討論,同時也優化了尋找過程。
manacher實現:
1 #include 2
3 #define clr(x,len) memset(x, '#', len)
4 5 char s1[100005], s2[200005];
6 int p[200005];
7 8 int main()
9 27 }
28 printf("%d\n", ans);
29 }
30 }
manacher的另一種實現,優點是不需要加標記,但寫起來容易出錯
1 #include 2
3 #define min(a,b) ((a)<(b)?(a):(b))
4 #define clr(x,len) memset(x, 0, len)
5 6 char s[100005];
7 int dp[200005];
8 int longestpalindrome(char * s);
9 int main()
10 16 }
17 int longestpalindrome(char * s);
19 char *p;
20 for(int i=0;s[dis+1]!='\0';++i)
21
31 }
32 return ans[1]>ans[0]?ans[1]<<1:(ans[0]<<1)+1;
33 }
51Nod 1088 最長回文串
回文串是指aba abba cccbccc aaaa這種左右對稱的字串。輸入乙個字串str,輸出str裡最長回文子串的長度。input 輸入str str的長度 1000 output 輸出最長回文子串的長度l。input示例 daabaac output示例5 題意 思路 從某個字元向兩邊遍歷,用...
51nod 1274 最長遞增路徑
1274 最長遞增路徑 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 乙個無向圖,可能有自環,有重邊,每條邊有乙個邊權。你可以從任何點出發,任何點結束,可以經過同乙個點任意次。但是不能經過同一條邊2次,並且你走過的路必須滿足所有邊的權值嚴格單調...
51nod 2494 最長配對 思維
最長配對 將所有0在開始時與處理為 1,這樣只要求字首和為0的最大區間長度即可。include include include include include define inf 0x3f3f3f3f using namespace std const int maxn 50005 int sum...