《数据结构C语言版》P79-84
---------------------------------------------------
1、简单的模式匹配
算法思想
主串S,S[0]存放串S的长度;模式串T,T[0]存放串T的长度。
设置两重循环,i指向主串S的索引,j'指向模式串T的索引。从主串的i=pos开始,尝试匹配模式串T,如果S[i]==T[j],则主串S和模式串T同时后移一个,继续匹配;如果S[i]!=T[j],则回溯到主串的i=i-j+2的位置,也就是外层循环的下一个位置,重新开始匹配模式串。
时间复杂度为O(n*m)
python3
def index(S, T, pos): # S为主串,T为模式串,pos为查找主串的起始位置
i, j = pos, 1
while i <= S[0] and j <= T[0]:
if S[i] == T[j]:
i += 1
j += 1
else:
i = i - j + 2
j = 1
if j > T[0]:
return i - T[0]
else:
return 0 # 不存在这样的子串
if __name__ == '__main__':
S = list('abbaba')
S.insert(0,