【KMP求字符串第一个匹配位置】hdu 1711
2017-07-22 21:07
483 查看
Hdu 1711
求模式串第一次出现在目标串的位置
求模式串第一次出现在目标串的位置
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<stack> #include<queue> #include<deque> #include<map> #include<algorithm> using namespace std; typedef long long LL; //#pragma comment(linker, "/STACK:102400000,102400000") /* hdu 1711 KMP简单题 求模式串第一次出现在目标串的位置 */ const double PI = acos(-1.0); const double eps = 1e-6; const int INF=0x3f3f3f3f; const int mod = 1e9+7; const int N=1000010; int a ,p ; int net ; void getnext(int len) { net[0] = -1; int k = -1; for(int i = 1; i < len; i++) { while(k!=-1 && p[k+1]!=p[i]) k = net[k]; if(p[k+1]==p[i]) k++; net[i] = k; } } int main() { int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); for(int i = 0; i < n; i++) scanf("%d",&a[i]); for(int i = 0; i < m; i++) scanf("%d",&p[i]); getnext(m); int id = -1, k = -1; for(int i = 0; i < n; i++) { while(k!=-1 && p[k+1]!=a[i]) k = net[k]; if(p[k+1]==a[i]) k++; if(k == m-1) { id = i; break; } } if(id==-1) puts("-1"); else printf("%d\n",id-m+2); } return 0; }
相关文章推荐
- HDU 1711 Number Sequence【KMP】【模板题】【水题】(返回匹配到的第一个字母的位置)
- KMP / hdu 1711 [找到匹配的位置并返回]
- hdu 1711 Number Sequence -- (KMP 求数列第一匹配的位置)
- HDU 1711 KMP求匹配位置
- HDU 1711 Number Sequence(KMP:找模板第一次出现的位置)
- POJ3461 字符串之模式匹配,kmp,求目标串中有多少个位置可重叠的子串
- hdu 1711 Number Sequence kmp模式匹配
- leetcode-28-匹配字符串位置(KMP)
- hdu 1711 kuangbin 字符串 A KMP入门
- HDU 1711 Number Sequence (KMP找子串第一次出现的位置)(基础模板题)
- hdu1711——Number Sequence(KMP求位置)
- HDU 1711 Number Sequence (KMP找子串第一次出现的位置)
- Java的indexOf返回的是第一个匹配到的字符的索引位置,substring(a,b)获得字符串的一部分内容
- KMP求匹配字符串位置
- [LeetCode]—Implement strStr() 寻找子串匹配第一个位置 (KMP)
- hdu 1711 kmp匹配
- KMP / hdu 1711 [找到匹配的位置并返回]
- HDOJ_1711_KMP 求匹配位置
- hdu 1711 Number Sequence(kmp找子串第一次出现的位置)
- KMP / hdu 1711 [找到匹配的位置并返回]