[解题报告]KMP算法

来源:互联网 发布:windows平板模式 编辑:程序博客网 时间:2024/05/23 22:14

Description

给定两个字符串a、b,求b在a中出现的位置。

Input

第一行为一个字符串a,长度大于等于1小于等于100000。
第二行为一个字符串b,长度大于等于1小于等于1000。

Output

一个整数,b在a中出现的位置,若b不是a的字串,输出-1。

Sample Input

abababcababc

Sample Output

3
#include<iostream>using namespace std;#include<string.h>#include<stdio.h> char ss[100010],s[1010];int next[1010]; int main(){    int sign=0;    scanf("%s",ss);    scanf("%s",s);    int n=strlen(ss);    int n1=strlen(s);    next[0]=0;    for(int i=1,n=0;i<n1;i++)    {        if(s[i]==s[n])        {            sign++;            n++;        }        else        {            sign=0;            n=0;        }        next[i]=sign;    }    bool ssign=0;    for(int i=0;i<n;)    {        for(int j=0;j<n1;j++)        {            if(ss[i+j]!=s[j])            {                if(j==0) i++;                i=i+j-next[j-1];                ssign=0;                break;            }            if(j==n1-1) ssign=1;        }        if(ssign)        {        cout<<i+1;        break;        }    }    if(!ssign) cout<<-1;    return 0;}


0 0
原创粉丝点击