hdu 4763 Theme Section
2016-07-15 10:31
363 查看
题意:给你一个字符串,问你能否找到三个子串(首,中间部分,尾)相等,如果可以输出最长的子串长度!
解法:kmp,首尾相同的情况下,找中间部分看是否有,用首子串作匹配串,中间部分为文本串!!
解法:kmp,首尾相同的情况下,找中间部分看是否有,用首子串作匹配串,中间部分为文本串!!
#include<iostream> #include<stdio.h> #include<string.h> int next[1000005]; char str[1000005]; int n; void mn() { int k=-1,j=0; next[0]=-1; while(j<n) { if(k==-1||str[k]==str[j]) { k++; j++; next[j]=k; } else k=next[k]; } } int kmp(int m) { int i=m,k=0; while(i<n-m) { if(k==-1||str[i]==str[k]) { i++; k++; } else k=next[k]; if(k==m) return k; } return -1; } int main() { int T ; scanf("%d",&T); while(T--) { scanf("%s",str); n=strlen(str); if(n<3) { printf("0\n"); continue; } mn(); int maxn=-1,l=n; while(next[l]>0) { int ans=kmp(next[l]); if(ans>maxn) { maxn=ans; break; } l=next[l]; } printf("%d\n",maxn>0?maxn:0); } return 0; }
相关文章推荐
- 【HDU 5366】The mook jong 详解
- 【HDU 2136】Largest prime factor 详细图解
- 【HDU 1568】Fibonacci 数学公式 详解
- HDU 1568
- HDU1290
- HDU1568(Fobonacci公式)
- HDU ACM Step 2.2.2 Joseph(约瑟夫环问题)
- HDU 1405
- HDU 1297
- hdu 1205
- hdu 2087
- hdu 1016
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- HDU 5592 ZYB's Premutation 线段树(查找动态区间第K大)
- HDU 5240 Exam (好水的题)
- HDU5237 Base64 大模拟
- HDU 1000
- HDU 1001
- HDU 1016 Prime Ring Problem
- HDU 1017 A Mathematical Curiosity