1204 寻找子串位置

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 青铜 Bronze
 
 
 
题目描述 Description

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

输入描述 Input Description

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

输出描述 Output Description

仅一行一个整数

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
string ch,ch1;
int a[105];
int main()
{
cin>>ch>>ch1;
int n=ch.length(),m=ch1.length();
ch=' '+ch;
ch1=' '+ch1;
int j=0;
for(int i=2;i<=m;i++)
{
while(j>0&&ch1[j+1]!=ch1[i])
j=a[j];
if(ch1[j+1]==ch1[i])
j++;
a[i]=j;
}
j=0;
for(int i=1;i<=n;i++)
{
while(j>0&&ch1[j+1]!=ch[i])
j=a[j];
if(ch1[j+1]==ch[i])
j++;
if(j==m)
{
printf("%d\n",i-m+1);
}
}
return 0;
}

posted on 2016-01-20 15:17  xiyuedong  阅读(192)  评论(0编辑  收藏  举报