码迷,mamicode.com
首页 > 其他好文 > 详细

【CODEVS1204】寻找子串位置

时间:2016-02-14 18:31:42      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

Description

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

Input

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

Output

仅一行一个整数

Sample Input

abcd bc

Sample Output

2

Hint

字符串的长度均不超过100

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

 

#include<iostream>
#include<cstring>
using namespace std;
char a[110],b[110];
int next[110],f[110];
int main()
{
    cin>>a>>b;
    int n=strlen(a),m=strlen(b);
    next[0]=0;
    //求next数组↓ 
    for (int i=1,j=0;i<=m;i++)//对b串自匹配 
    {
        while (j>0 && b[j]!=b[i]) j=next[j];
        if (b[j]==b[i]) j++;
        next[i]=j;
    }
    //求next数组↑
    for (int i=0,j=0;i<=n;i++)//a串与b串进行模式匹配 
    {
        while (j>0 && (j==m || a[i]!=b[j])) j=next[j];
        if (a[i]==b[j]) j++;
        f[i]=j;
     }
     
    for (int i=0;i<=n;i++)
    if (f[i]==m)
        cout<<i-m+2;
    return 0;
} 

 

【CODEVS1204】寻找子串位置

标签:

原文地址:http://www.cnblogs.com/liumengyue/p/5189395.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!