博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1277 字符串中的最大值(KMP算法)
阅读量:5095 次
发布时间:2019-06-13

本文共 1030 字,大约阅读时间需要 3 分钟。

分析:

KMP算法:参考http://www.cnblogs.com/c-cloud/p/3224788.html,是一个线性处理字符串匹配问题的算法

在这里利用到next数组,记t[i]为长度为i的前缀出现的次数,显然t[n]=1。next[i]即为子串[0,i]的后缀与前缀重复的最长长度,因此可以统计一下next[i]的取值的个数,然后较长的前缀出现一次代表较短的前缀也一次,递推一下即可,复杂度为O(n)。

1 #include
2 #include
3 #include
4 using namespace std; 5 const int maxn=1e5+5; 6 typedef long long ll; 7 int n,next[maxn],t[maxn]; 8 char s[maxn]; 9 int main(){10 // freopen("e:\\in.txt","r",stdin);11 cin>>s;12 n=strlen(s);13 memset(next,0,sizeof(next));14 memset(t,0,sizeof(t));15 int q,k;16 for(q=1,k=0;q
0&&s[q]!=s[k]){18 k=next[k-1];19 }20 if(s[k]==s[q])21 k++;22 next[q]=k;23 }24 for(int i=n;i>0;i--){25 t[i]++;26 t[next[i-1]]+=t[i];27 }28 ll ans=0;29 for(int i=1;i<=n;i++){30 if((ll)t[i]*i>ans)ans=(ll)t[i]*i;31 }32 cout<
<

 

转载于:https://www.cnblogs.com/7391-KID/p/7156311.html

你可能感兴趣的文章
黑马程序员——2 注释
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
查询消除重复行
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
[转]Android xxx is not translated in yyy, zzz 的解决方法
查看>>
Mobiscroll脚本破解,去除Trial和注册时间限制【转】
查看>>
iframe父子页面通信
查看>>
map基本用法
查看>>
Redis快速入门
查看>>
BootStrap---2.表格和按钮
查看>>
CRC计算模型
查看>>
Ajax之404,200等查询
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
数据库连接字符串大全 (转载)
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Screening technology proved cost effective deal
查看>>