• 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;
    }
  • 相关阅读:
    session_id 生成原理
    压缩后的数据 要经过 base64_encode 后才能在网络上传送
    MySQL ANALYZE TABLE
    mysql 优化2
    mysql 查询优化
    第归调用
    『GoLang』函数
    『GoLang』控制结构
    『GoLang』语法基础
    『Python』装饰器
  • 原文地址:https://www.cnblogs.com/hyfer/p/5658342.html
Copyright © 2020-2023  润新知