python字符串查找的四种方法,python在字符串中查找指定字符
Python搜索字符串使用变量。find(查找什么[,起始位置,结束位置]),起始位置和结束位置表示要查找的范围,如果为空,则表示查找全部。找到了就还位置。位置从0开始,找到就返回-1。
“你好”
Print.find (hello) #在字符串str中查找字符串hello
2 #输出结果
朴素匹配算法
朴素匹配算法是目标字符串和模板字符串一对一的匹配。如果匹配,下标向右移动一位,否则,下标被清除,匹配重新开始。
target=abb aba
模式=aba
定义匹配(目标,模式):
i=j=0
n,m=len(目标),len(模式)
而i n和j m:
#如果字符相等,则目标和模板的下标都向右移动。
if target[i]==pattern[j]:
I,j=i 1,j 1
否则:
#如果字符不相等,目标下标将切换到不相等的下标。
#模板下标移动到初始下标
i=i - j 1
j=0
如果j==m:
返回i - j
返回-1
在上面加上print,再打印一次。
#在哪里修改的
否则:
i=i -j 1
j=0
打印(目标[i],图案[j],I,j)
#打印结果
b a 1 0
b20
a 3 0
a 4 0
循环,直到匹配值相等。这种方法效率低,主要是因为没有匹配时模板字符会再次循环。最多可能有m *(n-m-1)次。m是模板字符的长度,n-m 1是排除不相等字符的次数。
knuth morris pratt算法
Kmp是一种根据已知匹配字符进行移位的算法。例如,abb与上面ABB中的abc比较时是已知的。
定义匹配(目标,模式):
i=j=0
n,m=len(目标),len(模式)
而i n和j m:
#如果字符相等,则目标和模板的下标都向右移动。
if if j==-1且target[i]==pattern[j]:
I,j=i 1,j 1
否则:
#这里,位移的个数由下一个函数判断。
i=i - j模式_下一个(模式[:j])
j=0
如果j==m:
返回i - j
返回-1
定义模式_下一个:
prefix=[s[:I 1]for I in range(len(s)-1)]
后缀=[s[i 1:] for i in range(len(s)-1)]
l=list(set(前缀)set(后缀))
返回长度(l)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。