python语言写用回溯法解决字符串匹配问题 给定一个s字符串和一个n字符串,在s字符串中找出n字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1(需要给出多个测试用例,证明算法的正确性)。
时间: 2024-02-22 20:56:01 浏览: 80
好的,我可以为你提供代码实现。以下是使用回溯法解决字符串匹配问题的Python代码:
```python
def match(s, n):
"""
在s字符串中找出n字符串出现的第一个位置(从0开始)。
如果不存在,则返回 -1。
"""
s_len, n_len = len(s), len(n)
i, j = 0, 0
while i < s_len and j < n_len:
if s[i] == n[j]:
i += 1
j += 1
else:
i = i - j + 1
j = 0
if j == n_len:
return i - j
else:
return -1
# 测试用例
assert match("hello world", "world") == 6
assert match("hello world", "o w") == 4
assert match("hello world", "abc") == -1
assert match("hello world", "d") == 10
assert match("hello world", "") == 0
```
以上代码中,我们用 i 和 j 分别表示当前在 s 字符串和 n 字符串中匹配的位置。当 s[i] == n[j] 时,表示当前字符匹配成功,i 和 j 都向前移动一位。当发现不匹配时,i 要回溯到上一次匹配的下一个位置,即 i = i - j + 1,同时 j 重置为 0。如果最终 j 等于 n_len,表示匹配成功,返回匹配的起始位置,否则返回 -1。
以上给出的测试用例可以证明算法的正确性。
阅读全文