码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构之 字符串---字符串匹配(kmp算法)

时间:2014-11-14 22:32:36      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:des   blog   io   os   sp   数据   div   log   bs   

串结构练习——字符串匹配

Time Limit: 1000MS Memory limit: 65536K

题目描述

  给定两个字符串string1和string2,判断string2是否为string1的子串。
 

输入

 输入包含多组数据,每组测试数据包含两行,第一行代表string1,第二行代表string2,string1和string2中保证不出现空格。
 

输出

 对于每组输入数据,若string2是string1的子串,则输出"YES",否则输出"NO"。
 

示例输入

abc
a
123456
45
abc
ddd

示例输出

YES
YES
NO


#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>

using namespace std;

void GET_next(string t, int next[])
{
    int j, k;
    j=0; k=-1;
    next[0]=-1;
    int len=t.size();

    while(j<len )
    {
        if(k==-1 || t[j]==t[k] )
        {
            j++;
            k++;
            next[j]=k;
        }
        else
            k=next[k];
    }
}

int KMP(string s, string t, int next[] )
{
    int i, j;
    i=0; j=0;
    int len1=s.size();
    int len2=t.size();

    while(i<len1 && j<len2 )
    {
        if(j==-1 || s[i]==t[j] )
        {
            i++;
            j++;
        }
        else
            j=next[j];
    }
    if(j==len2 )
      cout<<"YES\n";
    else
      cout<<"NO\n";
    return 0;
}


int main()
{
    string s, t;
    int i, j;
    int len1, len2;
    int next[1000];

    while(cin>>s)
    {
        cin>>t;
        len1=s.size();
        len2=t.size();
        GET_next(t, next);
        KMP(s, t, next);
    }
    return 0;
}

 

数据结构之 字符串---字符串匹配(kmp算法)

标签:des   blog   io   os   sp   数据   div   log   bs   

原文地址:http://www.cnblogs.com/yspworld/p/4098253.html

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