python字符串匹配实现的另类想法
2018-01-14 20:42
405 查看
基本思考:
已知KMP算法目标串指针的不回溯,能不能利用这个想法开发出其他的不回溯解决方案呢?
考虑这样一种匹配方法:从模式串的第0位开始,如能与目标串对应位置匹配那模式串增加一位并且目标串增加一位,这点大家都明白。接着遇到第一个不匹配的,此时目标串指针不回溯,模式串指针也不回溯。把模式串像右移动一位,相当于把模式串当前指针与目标串下一个匹配,依此类推。当模式串最后一位与目标串匹配时,我们再回过头来从模式串的第0位开始补完前面的匹配。此算法难点在记录模式串匹配指针的最后起始位置,我花了一个多小时写下以上想法的实现算法,可能比较抽象。
def match(pattern,text):
n=len(pattern)
m=len(text)
i,j,k=0,0,0
while j<=n and i<m:
if text[i]==pattern[j]:
i+=1
j+=1
if j==n: #匹配到最后时,跳回第0位
i=i-j
j=0
while j<k:
if text[i]==pattern[j]:
i+=1
j+=1
else:
i+=1
if j==k:
return i-k
else:
i+=1
k=j #记录指针最后不匹配位置
return -1
已知KMP算法目标串指针的不回溯,能不能利用这个想法开发出其他的不回溯解决方案呢?
考虑这样一种匹配方法:从模式串的第0位开始,如能与目标串对应位置匹配那模式串增加一位并且目标串增加一位,这点大家都明白。接着遇到第一个不匹配的,此时目标串指针不回溯,模式串指针也不回溯。把模式串像右移动一位,相当于把模式串当前指针与目标串下一个匹配,依此类推。当模式串最后一位与目标串匹配时,我们再回过头来从模式串的第0位开始补完前面的匹配。此算法难点在记录模式串匹配指针的最后起始位置,我花了一个多小时写下以上想法的实现算法,可能比较抽象。
def match(pattern,text):
n=len(pattern)
m=len(text)
i,j,k=0,0,0
while j<=n and i<m:
if text[i]==pattern[j]:
i+=1
j+=1
if j==n: #匹配到最后时,跳回第0位
i=i-j
j=0
while j<k:
if text[i]==pattern[j]:
i+=1
j+=1
else:
i+=1
if j==k:
return i-k
else:
i+=1
k=j #记录指针最后不匹配位置
return -1
相关文章推荐
- 字符串匹配的KMP算法——Python实现
- 字符串匹配的KMP算法和朴素算法,及其python实现
- 基于python写的专门用于字符串匹配的smartscript实现代码
- Python实现字符串匹配算法代码示例
- 字符串匹配的kmp算法 及 python实现
- 字符串匹配的python实现
- Java实现算法导论中Rabin-Karp字符串匹配算法
- python3.4.3实现txt文本指定字符提取
- python split同时用多种字符分割字符串并去除空串 简单两行代码实现
- python fuzzywuzzy模块 模糊字符串匹配详细用法
- 字符串匹配(java)实现,普通的匹配和KMP算法 (参考)
- Python实现全角半角字符互转的方法
- kmp算法实现字符串匹配
- 典型字符串匹配算法实现
- python实现中文字符繁体和简体中文转换
- 字符串匹配之KMP算法思路、原理与Java实现
- 字符串匹配 CCF KMP算法实现字符串匹配
- Java中使用正则表达式实现字符串匹配
- mysql 自定义函数 实现字符串匹配
- 字符串匹配问题——求给定字符串的next数组以及KMP算法实现