给定一个s字符串和一个n字符串,在s字符串中找出n字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1用动态规划写
时间: 2024-02-11 20:03:40 浏览: 84
求字符串中的第一个数字
好的,这是一个字符串匹配的问题,可以使用动态规划算法来解决。
我们可以定义一个二维数组 dp,其中 dp[i][j] 表示 s 字符串中以 i 结尾的子串是否匹配 n 字符串中以 j 结尾的子串。如果匹配,那么 dp[i][j] 的值为 true,否则为 false。
那么,如何计算 dp 数组的值呢?
首先,如果 s[i] 等于 n[j],那么 dp[i][j] 的值就等于 dp[i-1][j-1],也就是说只需要判断 s[i-1] 和 n[j-1] 是否匹配即可。
如果 s[i] 不等于 n[j],那么 dp[i][j] 的值就等于 false。
最后,如果 dp[i][j] 的值为 true,那么说明 s 中以 i 结尾的子串和 n 中以 j 结尾的子串匹配成功,那么第一个位置就是 i-j。
下面是具体的代码实现:
```python
def match(s: str, n: str) -> int:
m, k = len(s), len(n)
if m < k:
return -1
dp = [[False] * k for _ in range(m)]
for i in range(k):
if s[i] == n[i]:
dp[i][i] = True
for i in range(k, m):
for j in range(k):
if s[i] == n[j]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = False
if dp[i][k-1]:
return i-k+1
return -1
```
这样就可以在动态规划的时间复杂度内解决字符串匹配问题了。
阅读全文