赞
踩
7-1 串的模式匹配
分数 30
全屏浏览题目
切换布局
作者 陈晓梅
单位 广东外语外贸大学
给定一个主串S(长度<=10^6)和一个模式T(长度<=10^5),要求在主串S中找出与模式T相匹配的子串,返回相匹配的子串中的第一个字符在主串S中出现的位置。
输入有两行:
第一行是主串S;
第二行是模式T.
输出相匹配的子串中的第一个字符在主串S中出现的位置。若匹配失败,输出0.
在这里给出一组输入。例如:
- aaaaaba
- ba
在这里给出相应的输出。例如:
6
- #include <iostream>
- #include <algorithm>
-
- using namespace std;
-
- char s[100000010],q[100000010];
- int ne[100000010];
-
- int kmp()
- {
- for(int i = 1 , j = 0; s[i] != '\0' ; i ++)
- {
- while(j && q[j + 1] != s[i]) j = ne[j];
- if(q[j + 1] == s[i]) j ++;
-
- if(q[j + 1] == '\0') return i - j + 1;
- }
-
- return 0;
- }
-
- int main()
- {
- cin>>s+1>>q + 1;
- ne[1] = -1;
- for(int i = 2 , j = 0 ; q[i] != '\0' ; i ++)
- {
- while(j && q[j + 1] != q[i]) j = ne[j];
- if(q[j + 1] == q[i]) j ++;
- ne[i] = j;
- }
-
- cout << kmp() << endl;
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。