在串的問題裡,匹配是很重要的一類問題。匹配是在乙個給定的主串中尋找乙個相同的子串,確定子串出現的位置。
乙個樸素的做法是,將主串和子串逐字元比較。用指標移動兩字元。步驟如下:
1: 有兩指標,其中乙個i指向主串查詢的位置,另外j乙個指標指向子串的首位。
2: 比較兩指標所指的字元。如果相同,兩指標都移動一位。如果不同,j回到子串首位,i回到比較的初始位置+1位。
3: 直至j大於子串的長度。說明找到乙個匹配的位置。
以下是找出乙個主串的所有匹配子串位置的c語言**。
int index(str s,str t,intpos)
else
}if (j >=strlen(t))
} return0;
}
以下是找出乙個主串的所有匹配子串位置的python語言**。
classindex(object):
def__init__
(self,s,t,pos):
self.s =s
self.t =t
self.pos =pos
defindex(self):
i = self.pos - 1;
while i j =0
while j < len(self.t) and i if self.s[i] ==self.t[j]:
i = i + 1j = j + 1
#ifelse
: i = i - j + 1j =0
#else
#while
if j >=len(self.t):
print ("
the word is at:%d
" % (i - len(self.t) + 1) )
(完)
資料結構 串的樸素模式和KMP匹配演算法
一 樸素模式 假設我們要從主串s goodgoogle 中找到子串t google 的位置,步驟如下 i表示主串的當前位置下標,j表示子串的當前位置下標,如上圖在第一輪比較 i 1開始 中j 4和i 4的位置不匹配,接下來就要指標回退,從i 2開始比較,如下 如此反覆直到比較到 i 主串長度 子串長...
C語言資料結構 9 串的樸素模式匹配演算法
查詢字串子串的位置的操作,稱為串的模式匹配,子串被稱為模式串。串的模式匹配是非常高頻的操作,具體如何去匹配的演算法也很重要。樸素模式匹配演算法也稱為布魯特 福斯演算法,感覺很是高大上,但是實現起來很簡單。樸素的意思就是最符合咱們樸素思維的演算法,從主串的第乙個字元開始與子串進行比對,如果相等則逐一比...
資料結構梳理04 串的模式匹配 KMP演算法
一 串的模式匹配 設有兩個串s和pat,若在s中查詢是否有與pat相同的子串,則稱串s為目標,稱pat為模式,串的模式匹配即為查詢模式串在目標串中的匹配位置的運算。1 樸素的模式匹配 b f演算法 樸素的模式匹配想法十分簡單粗暴 將pat中的每個字元依次與s中的字元比較,如果某一位匹配失敗,則將pa...