稀里糊涂1A开心。我做了2次kmp,先第一次利用next[],由于next[]前面一小段一直是一样的,所以可以根据这个来找。然后就找到了开头和结尾,还缺中间的部分。

中间的部分就是通过开头部分去模式匹配,如果有就直接输出,break就可以。(因为开始长度最长)

#include<stdio.h>
#include<string.h>
#define maxn 1000010
int next[maxn],nexts1[maxn];
char s[maxn],s1[maxn],s2[maxn],flag;
void getnext()
{int j,k,len=strlen(s);j=0;k=-1;next[0]=-1;while(j<len){if(k==-1||s[j]==s[k]){j++;k++;next[j]=k;}else k=next[k];}
}
int KMP()
{int i,j,k,len=strlen(s1);k=-1;j=0;nexts1[0]=-1;while(j<len){if(k==-1||s1[j]==s1[k]){j++;k++;nexts1[j]=k;}else k=nexts1[k];}j=0;i=0;int fl=strlen(s2);while(i<fl){if(j==-1||s1[j]==s2[i]){i++;j++;}elsej=nexts1[j];if(j==strlen(s1)){return 1;}}return 0;
}
void kmp()
{int i,j,len=strlen(s),ans;getnext();i=len-1;while(next[i]!=-1){int k=0,p=0;flag=1;if(s[next[i]]!=s[i])//这里我是这样想的 如果当前的和他next[]的值不一样,那就要继续往下找i=next[i];for(j=0;j<=next[i];j++)s1[k++]=s[j];s1[k]='\0';if(s1[0]=='\0'){flag=0;break;}for(j=next[i]+1;j<len-1-next[i];j++)s2[p++]=s[j];s2[p]='\0';if(!KMP()){flag=0;}else {ans=strlen(s1);break;}i=next[i];//printf("%s   %s\n",s1,s2);
    }if(flag==0){printf("0\n");}elseprintf("%d\n",ans);
}
int main()
{int i,j,t;scanf("%d",&t);while(t--){scanf("%s",s);if(strlen(s)<3){printf("0\n");continue;}kmp();}
}

转载于:https://www.cnblogs.com/sweat123/p/4720046.html

hdu4763 KMP相关推荐

  1. SZUACM集训字符串基础总结: 字符串最小表示 ,KMP, EXKMP, Manracher, Trie树,字符串的hash; 附带一写常见的运用技巧,邝斌大佬的板子和例题[持续更新]

    第一部分 字符串的匹配<-------->KMP 模式匹配:子串的定位运算称为串的模式匹配或串匹配. 假设有两个串S,T,设S为主串,也称正文串,T为子串,也称为模式,在主串S中查找与模式 ...

  2. kmp求前缀和后缀的最大重复部分

    hdu 2594 kmp水题 求s1的前缀和s2的后缀重复度的最大值 2013-06-05 11:16 1199人阅读 评论(0) 收藏 举报  分类: KMP(8)  版权声明:本文为博主原创文章, ...

  3. BF算法优化-------KMP算法

    百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

  4. MUV LUV EXTRA 2019CCPC秦皇岛站J题 KMP

    题目链接 题意:意思给你俩数一个字符串,然后让你对字符串小数点后边的字符串进行处理,找个一个循环节以及对应出现的长度, 然后用a*p-b*l算得到一个最大值 那肯定循环节就想到了KMP了,然后循环长度 ...

  5. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  6. 字符串匹配算法 -- BM(Boyer-Moore) 和 KMP(Knuth-Morris-Pratt)详细设计及实现

    文章目录 1. 算法背景 2. BM(Boyer-Moore)算法 2.1 坏字符规则(bad character rule) 2.2 好后缀规则(good suffix shift) 2.3 复杂度 ...

  7. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  8. hiho 1015 KMP算法 CF 625 B. War of the Corporations

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  9. HDU 1711 Number Sequence(KMP算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...

最新文章

  1. 只因为离职报告多写这三个字,员工竟然倒赔公司2.9万!
  2. Project Management - 3) Manage Your Meetings
  3. 关于wifi的HW hdr error:len/check错误解决方法
  4. Codeforces Round #694 (Div. 2) D. Strange Definition 质因子分解 + 平方数
  5. Fluent Design单选按钮,复选框,选择框,Java菜单
  6. 去掉xsl运行的飞鸽传书办法
  7. 谷歌android红米手机,小米多款谷歌Android One手机曝光:全是红米系列
  8. mysql上一条语句成功_mysql : 获取上一条insert语句
  9. 输入法快捷键_[秒杀必备]搜狗输入法自定义短语快捷键设置
  10. js获取字符串出现最多的字符和次数
  11. 你可以退部的,不必说抱歉
  12. 世界编程大赛第一名编写的程序-3D世界
  13. 如何编写干净的Java代码
  14. RFB-Net论文代码映射
  15. 2022「博客新星」年度评选TOP100名单
  16. linux没有cpufreq目录,Linux系统的Cpufreq
  17. 鲸探发布点评:8月19日发售《小窗白云与凿山骨》数字藏品
  18. “渴了么”软件详细说明书
  19. ICCV2019——SCRDet Towards More Robust Detection for Small, Cluttered and Rotated Objects
  20. 第二课等效变化与基尔霍夫定律

热门文章

  1. 加州大学新算法:让智能汽车更精准检测行人
  2. 解决Uncaught SyntaxError: Unexpected token var报错问题
  3. ES6中this的三种用法
  4. Kafka消费者Consumer常用配置
  5. restful-api最佳实践
  6. Android推送进阶课程学习笔记
  7. 大规模分布式存储系统(文摘)
  8. OC与c混编实现Java的String的hashcode()函数
  9. 自反ACL访问控制列表的应用
  10. 关于Ubuntu运行级别、开机启动脚本的说明