python语言写用回溯法解决字符串匹配问题 给定一个s字符串和一个n字符串,在s字符串中找出n字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1(需要给出多个测试用例,证明算法的正确性)。
时间: 2024-02-22 15:56:45 浏览: 28
好的,我可以为您提供一个基于回溯法的Python解法,代码如下:
```python
def backtracking(s: str, n: str) -> int:
m, p = len(s), len(n)
i = j = 0
while i < m and j < p:
if s[i] == n[j]:
i += 1
j += 1
else:
i -= j - 1
j = 0
if j == p:
return i - j
return -1
```
这里的 `s` 表示待查找的字符串,`n` 表示目标字符串。算法的核心思想是,从 `s` 的第一个字符开始,依次与 `n` 进行匹配。如果匹配成功,则继续往后匹配;如果匹配失败,则回退到上一个匹配成功的位置,从下一个字符开始重新匹配。如果最终找到了目标字符串,则返回其出现的位置;如果未找到,则返回 -1。
下面是一些测试用例:
```python
assert backtracking("hello world", "world") == 6
assert backtracking("hello world", "hi") == -1
assert backtracking("hello world", "") == 0
assert backtracking("", "world") == -1
assert backtracking("hello world", "l") == 2
assert backtracking("hello world", "o") == 4
assert backtracking("hello world", "ld") == 9
assert backtracking("hello world", "hello world") == 0
assert backtracking("hello world", "worldhello") == -1
```
可以看到,算法对于各种情况都能够正确地返回目标字符串在待查找字符串中的位置。
阅读全文