kmp演算法最重要的就是得到 next 陣列,以 next[j]=k 為例,在kmp演算法裡next陣列的意思是下標為 j 的字元失配時模式串要後移到k的位置重新開始比較,在求 next 陣列的過程中,我們也可以理解為是前 j 個字元中字首和字尾的相等的最大長度。
void
get_next
(string str,
int next)
else
k=next[k];}
}
這段**很簡潔易懂,因為如果有 str[j] = str[next[j]] 的話,next[j+1] = next[j] + 1,應該就 k = next[k] 比較難懂,但它其實就是在求 next 陣列的過程中又用了 kmp 演算法,如果字首和字尾失配的話,那麼本來指向字首末端的指標(在這段**裡指的是k)就要根據前面算出來的 next 陣列後移 ,直到匹配上。
有了 next 陣列,kmp演算法就很簡單了
int
kmp(string str1,string str2,
int next)
else
if(j==0)
else
if(j>=l2)
}return-1
;//沒有找到
}
KMP的一點心得
int next next陣列儲存的是當模式串匹配不上的時候將要跳轉的下標 void getnext char b int kmp char a,char b 尋找主串中有多少模式串 return k int kmp char a,char b 判斷主串中是否有模式串 return 0 字串a代表的...
SQL一點心得
sql語句將所有 stock 表裡的 縮寫 led甲 替換改寫成 led刷 update dbo stock set 縮寫 replace 縮寫 led甲 led刷 where 縮寫 like led甲 go字首 update mytable set myfield replace myfield,...
Cell myCell一點心得
ctor initializer形如 cell cell mvalue 0 mstring ctor initializer,能在建立資料成員的同時賦初值 1.const方法的工作原理是將方法內用到的資料成員都標記為const引用。因此試圖修改資料成員時,編譯器報錯。2.用explicit關鍵字標記...