hdu 2203 亲和串
来源:互联网 发布:淘宝直通车怎么进入 编辑:程序博客网 时间:2024/06/01 09:17
在s1中通过循环移位,使s1包含s2
直接暴搜,
for(int i=0;i<la;i++)
{
if(s1[i]==s2[0])
for(int j=1,k=i+1;j<lb;j++,k++)
{
if(s1[k%la]!=s2[j])
break;
}
}
kmp模板
模式匹配
kmp中next数组表示如果当前匹配不成功,匹配串移动到的位置,不考虑移动到的位置的数与当前位置数的关系。
kmp中nextval数组表示如果当前匹配不成功,匹配串移动到的位置,考虑移动到的位置的数与当前位置数的关系。
1.获取模式串next数组
<pre name="code" class="cpp">void getnext(char *pat) { int lp = strlen(pat); int i = 0; int j = -1; next[0] = -1; while(i < lp) { if(j == -1 || pat[i] == pat[j]) { i++; j++; next[i] = j; } else j = next[j]; } }<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
2.nextval数组
void getnextval(char *str) { int len = strlen(str); int i = 0; int j = -1; next[0] = -1; while(i<len) { if(j==-1||str[i]==str[j]) { i++;j++; if(str[i]!=str[j])next[i]=j; else next[i]=next[j]; } else j=next[j]; } }
3.kmp
如果不匹配模式串回到j=next[j]继续匹配
用kmp代码:
#include <iostream>#include <cstring>#include <cstdio>using namespace std;int next[100010];char a[200010],b[100010];void getnext(char *pat){ int len_pat = strlen(pat); int i = 0; int j = -1; next[0] = -1; while(i < len_pat) { if(j == -1 || pat[i] == pat[j]) { i++; j++; next[i] = j; } else j = next[j]; }}int kmp(char *str, char *pat){ int i = 0; int j = 0; int len_str = strlen(str); int len_pat = strlen(pat); getnext(pat); while(i < len_str) { if(j == -1 || str[i] == pat[j]) { i++; j++; } else j = next[j]; if(j >= len_pat) return 1; } return 0;}int main(){ int len_a,len_b,i; while(~scanf("%s%s",a,b)) { len_a = strlen(a); len_b = strlen(b); if(len_a < len_b) { printf("no\n"); continue; } for(i = 0; i <len_a; i++) a[i+len_a] = a[i]; a[i+len_a] = '\0'; if(!kmp(a,b)) printf("no\n"); else printf("yes\n"); } return 0;}
0 0
- HDU 2203 亲和串
- HDU 2203 亲和串
- HDU - 2203 亲和串
- hdu 2203 亲和串
- hdu 2203 亲和串
- HDU 2203 亲和串
- HDU-亲和串-2203
- hdu 2203 亲和串
- hdu 2203 亲和串
- hdu 2203 亲和串
- hdu 2203 亲和串
- HDU 2203 亲和串
- HDU 2203【亲和串】
- hdu 2203 亲和串
- HDU 2203 亲和串
- hdu 2203亲和串
- HDU 2203 亲和串
- HDU - 2203 亲和串
- Android中的IPC方式
- Swift通过tabbar搭建主界面
- java内存空间详解
- 题目1519:合并两个排序的链表 九度 本地通过 参考别人的
- APK文件名不得有空格
- hdu 2203 亲和串
- 一次被驳回的没法看C++日志模块
- 关于ps切图的一款好用插件(cutterman),亲测好用
- Xcode8 iOS10上关于NSPhotoLibraryUsageDescription、NSCameraUsageDescription、
- javascript学习笔记(廖雪峰javascript教程)
- 利用js实现鼠标切换控件背景图片
- MFC编程学习过程记录
- 继承与组合实现软件复用
- Android自定义Notification并没有那么简单