1616: 最长回文串(马拉车算法)
生活随笔
收集整理的這篇文章主要介紹了
1616: 最长回文串(马拉车算法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1616: 最長回文串
Time Limit: 1 Sec Memory Limit: 128 MB
[Submit][Status][Web Board]
Description
求一個字符串的最長回文串
Input
第一行輸入n
接下來n行每行每行一個字符串長度<=100000
Output
輸出最長回文串的長度
Sample Input
3
abababa
aaaabaa
acacdas
Sample Output
7
5
3
HINT
不要想太多 Water
Source
/*
提示很水,是因為這題雖然數據大但是常規方法暴力求解也不會超時
我寫這題主要是鞏固**馬拉車算法**
*/
Ac_code:
1.馬拉車算法,時間復雜度為線性的,時間復雜度O(N)
2.中心擴展法
#include <stdio.h> #include <string.h> char s[100005],t[200005]; int solve(char s[]) {int k = 0;t[k++] = '#';for(int i = 0; i < strlen(s); i++){t[k++] = s[i];t[k++] = '#';}int resLen = 0;for(int i = 1; i < strlen(t); i++){int p = i,q = i,sum = 0;while(t[p] == t[q] && p >= 0 && q < strlen(t)){sum++;p--;q++;}if(sum > resLen)resLen = sum;}return resLen; } int main() {int n;scanf("%d",&n);while(n--){scanf("%s",s);printf("%d\n",solve(s)-1);}return 0; }總結
以上是生活随笔為你收集整理的1616: 最长回文串(马拉车算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1470: 区间求最值(RMQ问题,ST
- 下一篇: cmd上运行java程序遇到的问题(找不