字符串移位包含问题(KMP)
来源:互联网 发布:python 2.7支持中文吗 编辑:程序博客网 时间:2024/06/06 03:01
题目:给定两个字符串s1和s2,要求判断s2是否能通过s1做循环移位得到的字符串包含。
例如:给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。
题目本质是判断s2是否包含在s1s1中,这里用KMP算法求解
#include <iostream>using namespace std ; void GetNext(char *p, int next[]){int len = strlen(p);next[0]=-1;int i=0,k=-1;while(i<len-1)//此处注意,第15行会i++操作,所以循环终止在len-1{if (k==-1 || p[i]==p[k]){i++;k++;next[i]=k;}else{k=next[k];}}}int KMP_Match(char *source, char *pattern){int s = strlen(source);int t = strlen(pattern);int *next = new int[t];GetNext(pattern,next);int i=0,j=0;while(i<s && j<t){if (j==-1 || source[i]==pattern[j]){i++;j++;}else{j=next[j];}}return (j==t)?i-j:-1;}int main(){char *s = "ababcababa";char *p = "ababa";int st = KMP_Match(s,p);cout << st;cout<<endl;system("pause");return 0;}
详细分析可以参考《算法导论》32.4节。
以上代码参考了
http://www.juliuschen.com/archives/21.html
http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html
- 字符串移位包含问题(KMP)
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 字符串移位包含问题
- 编程之美3.1——字符串移位包含的问题(KMP算法)
- 字符串移位包含的问题
- MFC(窗口,菜单栏,状态等的风格,孙鑫C++第九讲笔记整理)
- oracle网络配置和连接管理
- C++11:OpenSuSe11下编译gcc 4.7.1
- Android Training - 和其他程序交互(2) - 从一个activity取得结果
- Linux进程间通信IPC(三)--- signal
- 字符串移位包含问题(KMP)
- ORACLE 11g 关于用户密码过期的问题解决
- Oracle 10g 修改主机名或者IP解决EM无法重启
- Android Training - 和其他程序交互(3) - 允许其他程序启动你的activity
- oracle 行转列 列转行
- 构建图像的缩略图的方法
- Healthy Holsteins
- BNUOJ 26182 -----------Army Buddies 用结构体 仿双向链表的简单操作
- oracle expdp/impdp 用法详解