zoukankan      html  css  js  c++  java
  • codevs1204 寻找子串位置

    题目描述 Description

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

    输入描述 Input Description

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

    输出描述 Output Description

    仅一行一个整数

    样例输入 Sample Input

    abcd bc

    样例输出 Sample Output

    2

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<queue>
    using namespace std;
    const int maxn = 2005;
    int n,m,next[maxn];
    char t[maxn],p[maxn];
    void input(){
        cin>>t>>p;
        n = strlen(t);
        m = strlen(p);
    }
    void make(){
        next[0] = 0;
        for(int i = 1,k = 0;i < m;i++){
            while(k > 0 && p[i] != p[k]) k = next[k-1];
            if(p[i] == p[k]) k++;
            next[i] = k;
        }
    }
    void kmp(){
        for(int i = 0,k = 0;i < n;i++){
            while(k > 0 && t[i] != p[k]){
            k = next[k-1];
            }
            
            if(t[i] == p[k]) k++;
            if(k == m){
                cout<<i - m + 2;
                return;
            }
        }
    }
    int main(){
        input();
        make();
        kmp();
        return 0;
    }
  • 相关阅读:
    六种排序
    洛谷 P1879 [USACO06NOV]玉米田Corn Fields
    [USACO06NOV]玉米田Corn Fields
    c++位运算符 | & ^ ~ && ||,补码,反码
    Blockade(Bzoj1123)
    割点(Tarjan算法)【转载】
    子串
    生命是什么
    怎样说话才打动人
    自控力
  • 原文地址:https://www.cnblogs.com/hyfer/p/5658342.html
Copyright © 2011-2022 走看看