hdoj 2087 剪花布条
来源:互联网 发布:有趣的跳跃c语言 编辑:程序博客网 时间:2024/05/16 08:42
考察点:kmp的 简单应用
题目大意:输入两个字符串str1,str2,计算出从前面的字符串str1中能够剪出多少个str2,并输出。
题目解析: 典型的kmp应用,每一次匹配后如果相同,次数加1,不过由于是剪布条,所以一旦剪出符合的str2,只能从剩下的串里面继续匹配,直到最后。
简单来说就是,str2不能重叠出现,一旦匹配成功就要从后面的在重新开始匹配工作。
AC代码:
#include <stdio.h>#include <string.h>#define m 1200char str[m],buf[m*2];int next[m];int len1,len2,cont;void getnext() // 将主串分成适宜匹配的模式{ int i=0,j=-1; next[i]=j; len1=strlen(str); while(i<len1-1) { if(j==-1||str[i]==str[j]) { i++,j++; next[i]=j; } else j=next[j]; }}int kmp(){ getnext(); int i=0,j=0; cont=0; len1=strlen(str); len2=strlen(buf); while(i<len2) { if(j==-1||str[j]==buf[i]) // 符合匹配条件 { i++,j++; if(j==len1) cont++; //一次匹配成功 } else j=next[j]; // 不符合条件直接下跳 } return cont;}int main(){ while(scanf("%s",buf)&&buf[0]!='#') //对应题目中输入’#’输入结束的要求 { scanf("%s",str); printf("%d\n",kmp()); //输出匹配成功的次数,即剪出的数量 } return 0;}
0 0
- hdoj 2087 剪花布条
- HDOJ 2087 剪花布条
- hdoj 2087 剪花布条
- HDOJ 2087 剪花布条
- HDOJ 2087 剪花布条
- hdoj--2087 剪花布条
- hdoj 2087 剪花布条
- HDOJ 2087 剪花布条
- hdoj剪花布条
- HDOJ 2087 剪花布条 [KMP]
- HDOJ 2087 剪花布条【KMP】
- ACM HDOJ 2087 (剪花布条)
- HDOJ 2087 剪花布条 (字符串)
- [HDOJ 2087] 剪花布条 [KMP]
- hdoj 2087 剪花布条 【kmp】
- HDOJ 剪花布条 2087【KMP】
- HDOJ 2087 剪花布条----strstr函数
- HDOJ 2087 剪花布条(KMP)
- 修改navigationBar title的背景颜色
- 润乾报表数据分组时通过“根格”将数据分组后再分组
- Itext 学习 Paragraph (段)的用法
- MFC模拟登陆、操作路由器
- Bootstrap 4重大更新,亮点解读
- hdoj 2087 剪花布条
- 阿峥教你实现UITableView循环利用
- python email mime使用
- 根据内容更改label的frame
- 自学QT之qFind的用法
- SQL事务
- JAVA问题总结之10--逻辑运算注意事项
- 整数划分问题(递归法)
- MySQL笔记