CODEVS1204寻找子串位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CODEVS1204寻找子串位置相关的知识,希望对你有一定的参考价值。

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寻找子串位置的主要内容,如果未能解决你的问题,请参考以下文章

CODEVS1204寻找子串位置

[codevs 1204]寻找子串位置

CODEVS 1204 寻找子串位置 题解

codevs1204 寻找子串位置

codevs-1204

CodeVS1204 寻找字串位置