串的模式匹配

2021-06-21 10:10:11 字數 936 閱讀 9364

子串的定位操作通常稱作串的模式匹配。

index(s,t,pos);  t被稱為模式串。

直觀演算法:

int index(string s,string t,int pos)

else

}if(j > lent) return i-lent;

else return 0;

}直觀演算法很簡單,如果字串中當個字元匹配,主串指標和模式串指標都向前移;一旦某個字元不匹配,重新再來,主串指標指向匹配開始的下一位置,模式串指標從頭開始。

改進的辦法:

當失配的時候,不回溯i指標,而是利用已經得到的」部分匹配「的結果將模式向右滑動盡可能遠的一段距離。

用陣列next表示,next[j]表名當模式中的第j個字元與主串中相應字元失配時,在模式中需重新和主串中的該字元進行比較的字元的位置。

int index_kmp(string s,string t,int pos)

else                   //**唯一修改的地方

}if(j > lent) return i-lent;

else return 0; 

}現在要解決的問題就變得單一了:

如何獲取陣列next,而且是模式串t與模式串t間發生匹配,這種思想就是根據已經獲得的部分匹配獲得偏移量

void get_next(string t,int next)   //匹配成功則兩指標一起後移,並獲得next

else j = next[j];                                     //失配的時候則只要用已經獲得的部分匹配模式串指標j後移一段距離}}

繼續改進

void get_nextval(string t,int nextval)

else j = nextval[j];                                     }}

串的模式匹配

最近在學 vc include stdafx.h include include define max size 1000 串的模式匹配 功能 找出str2字串在str1字串中第一次出現的位置 不包括串結束符 返回 該位置的序號 環境 visual c 2008 注意 1.此為樸素的模式匹配演算法,...

串的模式匹配

以前每次看到字串匹配,一律跳過,今天耐著性子研究了下,依舊是半混沌狀態,先整理放在這,以備後用。這篇文章幫助很大,樸素匹配演算法 kmp演算法,收藏先。1.樸素匹配演算法 int patternmatch common const char pstring,const char ppattern i...

串的模式匹配

問題描述 對於兩個字串a,b。請設計乙個高效演算法,找到b在a中第一次出現的起始位置。若b未在a中出現,則返回 1。給定兩個字串a和b,及它們的長度lena和lenb,請返回題目所求的答案。測試樣例 acbc 4,bc 2 返回 2 思路 1,該型別題目的一般思路是暴力求解,採用兩層迴圈,我們會從a...