1. 程式人生 > 實用技巧 >opencv MAT與tensorflow tensor相互轉化

opencv MAT與tensorflow tensor相互轉化

今天又被科普了一下:kmp——k(kan)m(mao)p(pian)

其實說實話,這個字串演算法理解起來還是非常的困難的,而且我在網上看到的一些資料都是各說各的,彷彿都很有道理,但是都寫得還不夠全面,所以學習這一板板塊得知識,我是自己看的視訊,這裡我就推薦幾個,大家可以在B站上搜一搜,其實都講的還是非常的好的,“小甲魚的資料結構”還有B站搜KMP演算法的第一篇。

題目傳送門:P3375 【模板】KMP字串匹配

AC程式碼:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char a[1000100],b[1000100];
int next[1000100];
int main()
{
    scanf("%s%s",a+1,b+1);
    int la=strlen(a+1),lb=strlen(b+1);
    int j=0;
    next[1]=0;
    //先處理出next陣列,無非是b和自己匹配,與b和a匹配一樣,故程式碼差不多
    for(int i=2;i<=lb;i++)
    {
        while(j>0 && b[i]!=b[j+1]) j=next[j];//往前翻記錄了有相同字首的j
        if(b[i]==b[j+1]) j++;//i匹配成功了,i繼續往後 
        next[i]=j;//更新當前的next陣列 
    }
    j=0;
    for(int i=1;i<=la;i++)
    {
    	while(j>0 && a[i]!=b[j+1]) j=next[j];
        if(a[i]==b[j+1]) j++;
        if(j==lb) printf("%d\n",i-lb+1),j=next[j];//雖然成功匹配但是可以把他當作成並沒有成功匹配 
    }
    for(int i=1;i<lb;i++)
        printf("%d ",next[i]);
    printf("%d",next[lb]);
    return 0;
}

by njc