首页 > 其他 > 详细

【CodeVS】1204 寻找字串位置

时间:2016-02-18 17:50:12      阅读:187      评论:0      收藏:0      [点我收藏+]
题目描述 Description

给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。

输入描述 Input Description

仅一行包含两个字符串a和b

输出描述 Output Description

仅一行一个整数

样例输入 Sample Input

abcd bc

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

字符串的长度均不超过100

Pascal用户请注意:两个字符串之间可能包含多个空格

分类标签 Tags 

 注意:依旧是模板,但是这次是自己打的,发现了一些问题,WA了两次因为输出SB了233

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 char a[110],b[110];
 8 int lena,lenb,sp[110];
 9 
10 void calcsp()
11 {
12     int t;
13     sp[0]=-1;
14     for (int i=0;i<lena;i++)
15     {
16         t=sp[i];
17         while (t!=-1 && a[t]!=a[i]) t=sp[t];   //注意是&& 
18         sp[i+1]=++t;
19     }
20 }
21 
22 void kmp()
23 {
24     int t=0,k=0;
25     calcsp();
26     while (t<lena && k<lenb)
27     {
28         if (k==-1 || a[t]==b[k])    t++,k++; //注意从头匹配k==-1 
29         else    k=sp[k];
30         if (k==lenb)    cout<<t-lenb+1<<endl,t=0x7f;
31     }
32 }
33 
34 int main()
35 {
36     cin>>a>>b;
37     lena=strlen(a);
38     lenb=strlen(b);
39     kmp(); 
40     return 0;
41 }
View Code

 

【CodeVS】1204 寻找字串位置

原文:http://www.cnblogs.com/DMoon/p/5198741.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!