HDU-#2087 剪花布条(KMP & strstr)
来源:互联网 发布:流体热力学软件 编辑:程序博客网 时间:2024/04/30 14:08
题目大意:给出一个字符串,以及模板串,求字符串中有多少个模板串即子串?
解题思路:该题有两种做法,一是直接利用库函数中strstr()函数求解,每次找到一个就将其下标下移即可;二是利用kmp进行匹配,这是基础的kmp应用。两种解法详见code。
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2087
code:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 1000+10;char str[MAXN],pat[MAXN];char next[MAXN];int lenp,lens;void getFail(){ //失配函数 int i=0,j=-1; next[0]=-1; while(i<lenp){ if(j==-1 || pat[i]==pat[j]){ i++;j++; next[i]=j; } else j=next[j]; }}int kmp(){ //kmp()函数 int sum=0; if(lenp>lens) return 0; else{ int i=0,j=0; while(i<lens){ if(j==-1 || str[i]==pat[j]){ i++;j++; } else j=next[j]; if(j==lenp){ //匹配完成一个串,将j置0,进入下一次匹配 j=0; sum++; } } return sum; }}int str_str(){//strstr()函数 char *p=0; char *k=str; int ans=0; while((p=strstr(k,pat))!=0){ ans++; k=p+lenp; } return ans;}int main(){ memset(str,0,sizeof(str)); memset(pat,0,sizeof(pat)); while(scanf("%s",&str)!=EOF && str[0]!='#'){ scanf("%s",&pat); lens=strlen(str); lenp=strlen(pat); //kmp()函数 getFail(); int ans=kmp(); //strstr()函数 int ans=str_str(); printf("%d\n",ans); } return 0;}
0 0
- HDU-#2087 剪花布条(KMP & strstr)
- hdu 2087 剪花布条 strstr使用 或者 KMP
- 【HDU 2087】剪花布条 【KMP or strstr函数】
- HDU 2087 剪花布条(KMP)
- HDU 2087 剪花布条(KMP)
- HDU - 2087 剪花布条 (KMP)
- HDU 2087 剪花布条(kmp)
- HDU-2087 剪花布条(kmp)
- HDU 2087 剪花布条 (kmp)
- hdu 2087 剪花布条(KMP)
- hdu 2087 剪花布条(KMP)
- HDU - 2087 剪花布条(Kmp)
- HDU - 2087 - 剪花布条(kmp)
- HDU 2087剪花布条 (kmp)
- 【HDU】2087 - 剪花布条(KMP)
- HDU:2087 剪花布条(KMP)
- 【hdu 2087】剪花布条(kmp)
- HDU-2087 剪花布条 (KMP)
- 多线程编程13-----Exchanger同步工具类实现两线程数据交换
- 自动化测试实施步骤和最佳实践
- Unity3D学习笔记 Perfab
- cocos2dx 让一个滚动层跟着另一个动
- UML之轻松入门(1)-类图
- HDU-#2087 剪花布条(KMP & strstr)
- POJ 2942 Knights of the Round Table (点-双连通分量 + 交叉法染色判二分图)
- 修改Eclipse的默认charset 为utf-8
- 黑马程序员——预处理指令(宏定义)
- find命令详解
- Socket程序从Windows移植到Linux下的一些注意事项
- 动态存储过程 sp_executesql介绍和使用
- [Unity3D]Unity3D游戏开发之自动寻路与Mecanim动画系统的结合
- jquery 改变对象 onclick 点击事件方法