1. 程式人生 > >寒假訓練--KMP

寒假訓練--KMP

KMP

求子串的next
void getnext(char *s,int *next)
{
    int j , k ;
    next[0] = -1 ;
    j = 0 ; k = -1 ;
    while(j < strlen(s)-1)
    {
        if(k == -1 || s[j] == s[k])
        {
            j++;
            k++;
            next[j] = k ;
        }
        else
            k = next[k] ;
    }
}
全部程式碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define l 10000000
char str1[l] , str2[l] ;
int next[l] ;
void getnext(char *s,int *next)
{
    int j , k ;
    next[0] = -1 ;
    j = 0 ; k = -1 ;
    while(j < strlen(s)-1)
    {
        if(k == -1 || s[j] == s[k])
        {
            j++;
            k++;
            next[j] = k ;
        }
        else
            k = next[k] ;
    }
}
int main()
{
    int i , j , p ;
    while(scanf("%s%s", str1, str2)!=EOF)
    {
        i = 0 ; j = 0 ; p = 1 ;
		getnext(str2,next);
        while(str1[i]!='\0' && str2[j] !='\0')
        {
            if(str1[i]==str2[j])
            {
                i++; j++;
            }
            else
            {
                if(next[j]==-1)
                {
                    j = 0 ;
                    i++;
                    p = i + 1 ;
                }
                else
                {
                    j = next[j] ;
                    p = p - j ;
                }
            }
        }
        if(str2[j]=='\0')
            printf("%d\n", p);
        else
            printf("NO\n");
    }
}

相關推薦

寒假訓練--KMP

KMP 求子串的nextvoid getnext(char *s,int *next) { int j , k ; next[0] = -1 ; j = 0 ; k = -1

NUC-ACM/ICPC 寒假訓練 簡單DP A - G題

解法 文件 oss 發現 最大 bsp class sample har 第一題:數塔 HDU - 2084 做法: 從第 i , j 個 節點往下走的最優解可以由從第 i+1,j 個節點往下走的最優解和第i+1,j+1個節點往下走的最優解得出,二者取其優即可。 代碼

2018年全國多校算法寒假訓練

ike pre 興趣 sca 一個數 include 不能 可能 相同 題目描述 夫夫有一天對一個數有多少位數感興趣,但是他又不想跟凡夫俗子一樣,所以他想知道給一個整數n,求n!的在8進制下的位數是多少位。 輸入描述: 第一行是一個整數t(0<t<=1000

寒假訓練計劃

head ble 記錄 mar ali gpo pos 吐槽 水題 寒假訓練計劃 計劃 1、校內天梯賽+補題 2、cf 250~550 泛做 3、專題補全:遇到不會的知識點馬上去學習 並泛做該知識點3~5題 4、一天至少三題(扣除水題) 做題記錄 mark 題號 通過

常州大學新生寒假訓練會試 題解

href bits a + b print sys insert 價值 ins 答案 【題目鏈接】 A - 添加逗號 註意是從後往前三個三個加逗號,最前面不允許有逗號 #include <bits/stdc++.h> using name

2018寒假訓練記錄 2.7

wap gif closed esp 滑動 begin push swap tro 又看了一波後綴數組的論文,放棄要完全搞明白排序的那部分的想法了,黑盒就黑盒好了。 註意的地方是數組最後要加一個0,理解sa, height, rank這幾個數組的意義與用處。 sa[i]

常州大學新生寒假訓練會試

A新增逗號 題目描述  對於一個較大的整數 N(1<=N<=2,000,000,000) 比如 980364535,我們常常需要一位一位數這個數字是幾位數,但是如果在這 個數字每三位加一個逗號,它會變得更加易於朗讀。 因此,這個數字加上逗號成如下的模樣:

常州大學新生寒假訓練會試 大佬的生日大禮包

現在做新生題都很艱難了,為啥其他人都覺得很水,給跪了。 考慮給定3種元素個數 a , b

大一寒假訓練二(排序)

大一寒假訓練二(排序初級版) nefu 1481 誰考了第k名-排序 #include <bits/stdc++.h> using namespace std; struct student { int a; double b; }; int main

大一寒假訓練一(二維陣列和結構體)

基礎題就不解釋了,稍微要思考的題再註釋一下。 nefu 951 二維矩陣最大值 #include <stdio.h> int main() { int i,j,m,n,max1,max2,max,a[100][100]; while(scanf("%d

寒假訓練--字串--子串

子串 Time Limit: 1000MS Memory limit: 65536K 題目描述       對於一個字串變數,例如"abcdefghijkl",它的子串就是像"cdefg"

寒假訓練的小總結

在過完年的時候在HUST的vjudge上開了幾份小型的訓練專題 可以再Contest裡面搜尋"BUAA"進入,現在把這些訓練在這裡小小的總結一下。 作為最初的一套,選擇的是我剛接觸Codeforces時還在打Div2,有些坑著沒有看也沒有做的D,E題。 等到反過頭看看這

ECJTU ACM18級隊員寒假訓練賽 D題 CodeForces 1033A

front mem 訪問 n) force stdio.h abs queue ron #include<stdio.h>#include<queue>#include<string.h>#include<math.h>usi

ECJTU ACM18級隊員寒假訓練賽1 D題 HDU - 2181

set return string.h bool 註意 esp sca amp n-1 #include<stdio.h>#include<string.h>using namespace std; int map[25][4],path[25];

2016寒假訓練——字典樹

來源:HDU1251 這一題如果用最普通的匹配,那麼,我們需要每一次判斷的時候都進行一次遍歷,這樣不僅時間浪費了,而且太多的時候是重複計算。同時,由於是比較的字首,所以也不可能用KMP來節約時間。我們這裡只能使用字典樹。 直接用模板,道理很簡單的,這裡不細講,關鍵點見註釋。

寒假訓練01C:hdu1069

Problem Description A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the

寒假訓練—2.9

今天把最小割相關的部落格看了點,關於求割邊的一類,感覺明晰了很多,各類題型還是要多看的,依舊要繼續看poursoul的部落格。今天有點按耐不住歸家的心情了。哈哈哈。菜雞還是要努力呀,不能放鬆。不過今天發現題目太難讀了,簡直是很難理解題意。。。還是要多練呀。讀懂題目就感覺好做很

fzuacm 2017 新生寒假訓練 7

A - a While Mahmoud and Ehab were practicing for IOI, they found a problem which name was Longest common subsequence. They solved

寒假訓練——搜索 G - Xor-Paths

namespace The 兩種 outside formal tdi \n type java There is a rectangular grid of size n×mn×m . Each cell has a number written on it; the n

寒假集訓——KMP

此文章是集訓題目的解題報告,另外自己網上找了一些KMP的題目做做。 KMP簡單應用 Time Limit: 1000MS Memory limit: 65536K 題目描述 給定兩個字串string1和string2,判斷string2是否為string1