hdu 1686 Oulipo kmp字串比較

2021-06-06 03:37:19 字數 846 閱讀 6569

模式串:p[0],p[1],p[2]…p[k]…p[j-k-1]…p[j-1],p[j]……

若存在 : p[0],p[1]…p[k] = p[j-k-1]…p[j-1]

k代表模式串下標為0~j-1的左子串中首尾字串相等字元的個數,即next [ j ] = k。

即next[ j ]只與0~j-1「有關」。

next的作用是進行比較時,若此時字元不同則退回比較j=next[ j ] 處,再進行比較。

例如:     模式串  a   b   a   b   c   s   e   a   b   a   v   a   c

next    -1 -1  0  1  -1  -1   -1   0   1  2   -1  0  -1

要比較的字串  a   b   a   b   d   a    b   ……

比較到第5個字元時(j = 4),與模式串不同,而此時前4個字元中沒有c,則j=next[4]=-1 ,下一次比較為模式串的第乙個字元與要比較字串的第5個字元相比較。

若比較到第4個字元時(j=3) ,與模式串不同,則此時j=next[ 3 ]=1,即下一次比較為模式串的第2個字元與要比較的字串中的第4個字元相比較。

#include#includeusing namespace std;

char s[1000000],p[10005];

int next[10005];

void getnext()

}int kmp_time()

}return sum;

}}int main()

{ int n;

scanf("%d",&n);

for(int i=0;i

hdu 字串統計

problem description 對於給定的乙個字串,統計其中數字字元出現的次數。input 輸入資料有多行,第一行是乙個整數n,表示測試例項的個數,後面跟著n行,每行包括乙個由字母和數字組成的字串。output 對於每個測試例項,輸出該串中數值的個數,每個輸出佔一行。sample input...

python字元表示 Python字串比較和表示

adding another answer,which will points out the bug in your code 接下來的 if line 0 6 name or line 0 6 date print line if isinfile line,file2 true copy tr...

比KMP高效的Boyer Moore字串匹配演算法

在這裡我所要想說的比kmp演算法高效的演算法是boyer moore演算法。在講解boyer moore演算法之前,在這裡先回顧一下kmp演算法。比如說有乙個字串 bbc abcdab abcdabcdabde 我想知道,裡面是否包含另乙個字串 abcdabd 大部分情況下我們會使用kmp演算法去解...