51NOD 1088 1089 最長回文子串

2021-10-09 14:22:23 字數 1331 閱讀 1290

回文串是指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...