我目前只是试图制作一个天真的算法,它给出了一个模式,例如aabba 在一个文本中搜索它,例如abbbbaababaabbaaabbaa一次一个字母。它会将a与文本进行比较,如果是正确的则比较下一个字母,如果错误则整个模式将移动一个并将a与b等进行比较
我们给出了代码示例
print "Input text: ",
text = raw_input()
print "Input pattern: ",
pattern = raw_input()
index = text.find(pattern)
while index > -1:
print index
index = text.find(pattern, index+1)
但是python中的find()函数太快了(我需要一个非优化的算法,使用while 和for循环语句我猜。)
任何帮助表示赞赏, 谢谢
答案 0 :(得分:1)
我想这就是你需要的,下面的代码逐个字符进行比较。您还可以通过find
上的迭代替换对text
的调用,其中包括检查text
的第一个字符是否与pattern
的第一个字符匹配:
def my_find(text, pattern):
'''Find the start index of a pattern string in a text.
Return -1 if not found, and assume that pattern is not empty'''
found = False
current_start_index = text.find(pattern[0])
index_text = current_start_index
index_pattern = 0
while not found and index_text + len(pattern) - 1 < len(text) and \
current_start_index != -1:
index_text += 1
index_pattern += 1
while index_text < len(text) and \
index_pattern < len(pattern) and \
text[index_text] == pattern[index_pattern]:
if index_pattern == len(pattern) - 1:
found = True
break
else:
index_text += 1
index_pattern += 1
if not found:
current_start_index = text.find(pattern[0],current_start_index + 1)
index_text = current_start_index
if found:
return current_start_index
else:
-1
答案 1 :(得分:-1)
def my_find(haystack, needle):
n_len = len(needle)
start = 0
while start <= (len(haystack)-n_len+1):
if haystack[start:start+n_len-1] == needle:
return True
start += 1
据我所知,这是你的算法。未经测试,将测试并告知您是否有效。
经过测试,似乎有效。
答案 2 :(得分:-1)
听起来你正在学习正则表达式,这里有一个可以帮助你入门的片段。
myFileName = "abbababaaa"
patternToMatch = "ababa"
i = 0
j = 0
while (i < len(myFileName)):
if (patternToMatch[i:i] == myFileName[j:j]):
i++
j++
else:
i = 0
if len(patternToMatch) == i:
# matched a pattern