1、求子串位置的定位函式
子串的定位操作通常稱做串的模式匹配,是各種串處理系統中最重要的操作之一。現採用定長順序儲存結構,可以寫出簡單匹配演算法。
int index(sstring s,sstring t,int pos)
else
} if(j>t[0]) return i-t[0];
else return 0;
}
i和j指標分別指示主串和模式串中當前正待比較的字元位置。演算法描述:從主串s的第pos個字元起和模式的第乙個字元比較,若相等,則繼續逐個比較後繼字元;否則從主串的下乙個字元起再重新和模式的字元比較。此演算法的時間複雜度為o(n*m),其中n和m分別為主串和模式的長度。此演算法易引起指標i的多次回溯。
2、改進演算法——kmp演算法
kmp演算法的改進在於:每當一趟匹配過程中出現字元比較不等時,不需回溯i指標,而是利用已經得到的「部分匹配」的結果將模式向右滑動盡可能遠的一段距離後,繼續進行比較。
int index__kmp(sstring s,sstring t,int pos)
else j=next[j];
} if(j>t[0]) return i-t[0];
else return 0;
}
令next[j]=k,其表明當模式中第j個字元與主串中相應字元失配時,在模式中需重新和主串中該字元進行比較的字元的位置。
求next陣列的函式及修正的next陣列的函式如下:
void get_next(sstring t,int next)
{ int i=1,j=0;
next[1]=0;
while(i
串的模式匹配演算法
子串的定位操作通常稱做串的模式匹配,這也是串的乙個很要的操作。一,一般定位子串位置演算法 演算法基本思想 從主串的第1個字元起和模式的第乙個字元進行比較,若相等,則再比較主串和模式串的後續字元。否則將主串的後續字元和模式串的第乙個字元進行比較,在網上找的一張 return i t.length 找到...
串的模式匹配演算法
串的模式匹配演算法 子串的定位操作通常稱作串的模式匹配。通常用函式index s,t,pos 來求解,其中s為主串,t為模式串,pos為主串中的位置,整個函式的作用是返回在字串s中的第pos個字元及以後 包含pos 首次出現與字串t相匹配的子串的第乙個字元的位置。例如 s abciu 5 abcjk...
串的模式匹配演算法
1 brute force模式匹配演算法 暴力匹配 如果用暴力匹配的思路,並假設現在文字串s匹配到 i 位置,模式串p匹配到 j 位置,則有 如果當前字元匹配成功 即s i p j 則i j 繼續匹配下乙個字元 如果失配 即s i p j 令i i j 1 j 0。相當於每次匹配失敗時,i 回溯,j...