KMP專題小結

2021-06-22 15:44:43 字數 1162 閱讀 4063

關於kmp的資料自然是matrix67的最好了(orz),以及任何專題都可以套著看看的大白書(orz)~

拓展kmp:還是劉雅瓊的ppt講得最清晰(orz)

接下來就是題集了

【hdu 1358】  period:這道題考察了kmp的基本應用

如果前面部分是乙個迴圈,那麼迴圈節的必然為i-next[i]

如果i%(i-next[i])==0則可以得到依次對應相等。

#include#include#includeusing namespace std;

const int sizen=1000005;

char str[sizen];

int next[sizen];

void getnext(char *s,int len)

return 0;

}

codeforces #246 div2 pd與此題異曲同工,可以嘗試一做

【hdu 3613】best reward

分析題意:通過講字串一分為二,得到乙個以上的權值最大的回文子串

因為是一分為二,故回文子串只可能在頭或尾產生,因此就想到了擴充套件kmp

ekmp中extend[i]的定義是:主串中以s[i]開頭的子串與模式串字首的最長長度

因此就想到:能不能將字串反轉,然後做兩次ekmp,就可以判斷了?

答案是肯定的。那再用字首和記錄前後的val,若為回文串就加上,掃一遍取最大值accepted get!

#include#include#includeusing namespace std;

const int sizen=500005;

char str[sizen],sstr[sizen];

int next[sizen];

int extend1[sizen],extend2[sizen];

int val[sizen],len;

void ekmp(char s,char t,int extend)

rep(0,ans) printf("%c",s1[i]);

rep(0,ans) printf("%c",change[s1[i]-'a'+1]);

printf("\n");

}return 0;

}

KMP演算法小結

posted on 2011 06 14 byhuangchao 主要看了這裡,感覺講的十分的不錯,總結一下。首先宣告要搜尋的串為s,設長度為n,要匹配的串為m,設長度為m.先考慮暴力的演算法,暴力的演算法是遍歷s的每乙個字元,然後從這個字元開始和m串進行匹配。時間複雜度為o nm 怎麼在此基礎上進...

KMP演算法小結

主要看了這裡,感覺講的十分的不錯,總結一下。首先宣告要搜尋的串為s,設長度為n,要匹配的串為m,設長度為m.先考慮暴力的演算法,暴力的演算法是遍歷s的每乙個字元,然後從這個字元開始和m串進行匹配。時間複雜度為o nm 怎麼在此基礎上進行優化?假設現在從某個位置 設為s 開始和m串進行匹配,如果匹配不...

KMP演算法小結

文字串長度為n,模式串長度為m,匹配過程的時間複雜度為o n 計算next的o m 時間,kmp的整體時間複雜度為o m n 步驟 文字串s bbc abcdab abcdabcdabde 模式串p abcdabd 1.尋找p的 最長公共元素表 前字尾最長序列長度 失配時,模式串向右移動的位數為 已...