「靜時亦覺意思好,才遇事便不同,如何?」
「是徒知靜養而不用克己工夫也。如此,臨事便要傾倒。人須在事上磨,方立得住,
方能『靜亦定,動亦定。』」
此時正宜用功。若此時放過,閒時講學何用?人正要在此等時磨鍊。
子串的定位操作:串的模式匹配
挨個遍歷,例如在asdfghjkl中尋找dfg,需要將dfg與asdfghjkl從a~j依次進行比較,最壞結果時間複雜度很高(o(n-m+1)*m),非常低效。
關鍵點:1.看子串中前後是否有重複出現的字元(更加概括地說是觀察子串各元素的異同,結合主串進行分析,簡化運算。
next值:分類討論:j=1,next=0;若字首和字尾有重複,重複n個,next=n+1;其他情況(無重複),next=1;
需要注意的點,取j值,要看j-1的重複情況,不是j字串的重複情況。
**實現
/*通過計算返回子串t的next陣列*/
void
get_next
(string t,
int*next)
else
j=next[j];}
}
/*返回子串t在主串s中第pos個字元之後的位置。若不存在,則函式返回值為0*/
/*t非空 。1<=pos<=strlength(s)*/
//找出子串在主串中的位置
intindex_kmp
(string s ,string t,
int pos)
else}if
(j>t[0]
)//子串遍歷完畢
return i-t[0]
;else
return0;
}
可以對kmp演算法進行改進:nextval陣列代替next陣列,如果子串一位置後的元素和首元素的值一樣,就可以用一位置元素next值代替之後元素next值。 KMP模式匹配演算法 兩種
具體可分為 字首 prefix 法和next陣列法 1.思路 1 求出字首 prefix 表 2 依照字首 prefix 表來幫助匹配查詢 所以,找出字首 prefix 表是最核心的步驟 2.方法 給出兩種求字首 prefix 表的方法,這兩種方法的核心大致相當,都利用回溯的思想 本例中用指標j進行...
兩種簡單的字串匹配演算法
在機試筆記4中的統計子字串個數題目中,使用了一種時間複雜度為o n m 的字串匹配演算法,他也叫暴力匹配演算法或者bf演算法。在實際的開發中,它卻是乙個比較常用的字串匹配演算法。原因有以下幾點 第一,實際的軟體開發中,大部分情況下,模式串和主串的長度都不會太長。而且每次模式串與主串中的子串匹配的時候...
括號匹配(兩種演算法的完成)
題目描述 pipi給你乙個合法的括號序列,希望跟你按左括號下標遞增順序給出每對括號在序列中的下標。下標從1開始 輸入多組資料 第一行包括乙個只包含 的字串,保證輸入的括號匹配序列合法,長度不超過100000 輸出按左括號下標遞增順序給出每對括號在序列中的下標。樣例輸入 copy 樣例輸出 copy ...