• KMP / hdu 1711 [找到匹配的位置并返回]


    kmp 很好,要熟练
    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <cmath>
    #include <vector>
    #include <stack>
    #include <deque>
    #include <queue>
    #include <bitset>
    #include <list>
    #include <map>
    #include <set>
    #include <iterator>
    #include <algorithm>
    #include <functional>
    #include <utility>
    #include <sstream>
    #include <climits>
    #include <cassert>
    #define BUG puts("here!!!");
    
    using namespace std;
    const int N = 1000005;
    const int M = 10005;
    
    int s[N];
    int t[M];
    int next[M];
    void getNext(int len) {
        int i, j;
        i = 0, j = -1;
        next[0] = -1;
        while(i < len-1) {
            if(j == -1 || t[i] == t[j]) {
                i++, j++, next[i] = j;
            }
            else {
                j = next[j];
            }
        }
    }
    int kmp(int sl, int tl) {
        int i = 0, j = 0;
        while(i < sl && j < tl) {
            if(j == -1 || s[i] == t[j]) {
                i++, j++;
            }
            else j = next[j];
        }
        if(j == tl) return i-j+1;
        else return -1;
    }
    // abcabcababcabcabdef
    // abcabcabd
    int main() {
        int T, n, m, ans;
        cin >> T;
        while(T--) {
            cin >> n >> m;
            for(int i = 0; i < n; i++) {
                scanf("%d", s+i);
            }
            for(int i = 0; i < m; i++) {
                scanf("%d", t+i);
            }
            getNext(m);
            ans = kmp(n, m);
            cout << ans << endl;
        }
        return 0;
    }
    Sample Input
    2
    13 5
    1 2 1 2 3 1 2 3 1 3 2 1 2
    1 2 3 1 3
    13 5
    1 2 1 2 3 1 2 3 1 3 2 1 2
    1 2 3 2 1
    Sample Output
    6
    -1
  • 相关阅读:
    经典SQL语句大全
    jQuery.fn.extend与jQuery.extend到底区别在哪?
    JQuery.Ajax()的data参数类型
    浅谈数据库去重
    .net Session 详解
    50个必备的实用jQuery代码段
    jQuery 选择器大全
    细说static关键字及其应用
    OVER(PARTITION BY)函数用法
    eos超时 锁表问题 网友办法
  • 原文地址:https://www.cnblogs.com/robbychan/p/3787213.html
Copyright © 2020-2023  润新知