zoukankan      html  css  js  c++  java
  • KMP简单应用

    KMP简单应用

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

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

    输入

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

    输出

     对于每组输入数据,若string2是string1的子串,则输出string2在string1中的位置,若不是,输出-1。

    示例输入

    abc
    a
    123456
    45
    abc
    ddd
    

    示例输出

    1
    4
    -1
    
     
     #include <stdio.h>
    #include <string.h>
    
    char S[1000010], T[100010];
    int next[100010];
    
    void Get_Next()
    {
        int i = 0, j = -1, len = strlen(T);
        next[0] = -1;
        while(i < len)
        {
            if(j == -1 || T[i] == T[j])
            {
                ++i;
                ++j;
                next[i] = j;
            }
            else
            {
                j = next[j];
            }
        }
    }
    
    int KMP()
    {
        int len1 = strlen(S), len2 = strlen(T);
        int i = 0, j = 0;
        while(i < len1 && j < len2)
        {
            if(S[i] == T[j] || j == -1
    			)
            {
                ++i;
                ++j;
            }
            else
            {
                j = next[j];
            }
        }
        if(j >= len2)
            return i-len2+1;
        else
            return -1;
    }
    
    void Solve()
    {
        while(~scanf("%s", S))
        {
            scanf("%s", T);
            Get_Next();
            int Ans = KMP();
            printf("%d
    ", Ans);
        }
    }
    
    int main()
    {
        //freopen("data.in", "r", stdin);
        Solve();
    
        return 0;
    }
     
    
     
    
    

    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    codeforces 552 C Vanya and Scales
    CGlib小记
    关于camera senor的power引脚问题
    Android实战简易教程-第四十五枪(SlideSwitch-好看又有用的开关button)
    iOS UITableViewCell 几个方法的优先级
    android.app.Fragment与android.support.v4.app.Fragment不一致

    Delphi ADOQuery连接数据库的查询、插入、删除、修改
    updatebatch
    类方法调用
  • 原文地址:https://www.cnblogs.com/6bing/p/3931310.html
Copyright © 2011-2022 走看看