用python语言写一个算法。题目为给定一个s字符串和一个n字符串,在s字符串中找出n字符串出现的第一个位置(从0开始)。如果不存在,则返回 -1(需要给出多个测试用例,证明算法的正确性)
时间: 2024-02-18 15:01:51 浏览: 21
好的,这是一个字符串匹配的问题,可以用Python语言实现。以下是代码实现:
```python
def find_first(s, n):
for i in range(len(s) - len(n) + 1):
if s[i:i+len(n)] == n:
return i
return -1
```
这个算法的时间复杂度是 O(n*m),其中 n 是 s 字符串的长度,m 是 n 字符串的长度。可以看出,这个算法的效率较低。如果需要提高效率,可以使用 KMP 算法等字符串匹配算法。但是,在字符串长度较短的情况下,上述算法已经可以满足需求。
以下是一些测试用例:
```python
# 测试用例1
s1 = "hello, world!"
n1 = "world"
assert find_first(s1, n1) == 7
# 测试用例2
s2 = "this is a test string"
n2 = "test"
assert find_first(s2, n2) == 10
# 测试用例3
s3 = "this is a test string"
n3 = "hello"
assert find_first(s3, n3) == -1
print("测试通过!")
```
以上代码输出 `测试通过!`,证明算法的正确性。
相关问题
给定任意两个字符串,用python写出一个算法计算它们的编辑距离
好的,我了解了。关于您的问题,我们可以使用动态规划来计算两个字符串的编辑距离。
具体步骤如下:
1. 创建一个二维数组dp,其中dp[i][j]表示字符串1前i个字符与字符串2前j个字符的编辑距离。
2. 初始化dp数组:
1) 当i=0,j=0时,dp[i][j]=0。
2) 当i=0时,dp[i][j]=j,因为如果字符串1为空,需要把字符串2的j个字符都删除。
3) 当j=0时,dp[i][j]=i,因为如果字符串2为空,需要把字符串1的i个字符都删除。
3. 根据以下公式计算dp数组:
if s1[i-1]==s2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = 1+min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1])
其中,s1[i-1]为字符串1第i个字符,s2[j-1]为字符串2第j个字符。
4. 最终结果为dp[m][n],其中m和n为两个字符串的长度。
下面是完整的Python代码实现:
```python
def edit_distance(s1, s2):
m, n = len(s1), len(s2)
dp = [[0]*(n+1) for _ in range(m+1)]
for i in range(m+1):
dp[i][0] = i
for j in range(n+1):
dp[0][j] = j
for i in range(1, m+1):
for j in range(1, n+1):
if s1[i-1] == s2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = 1+min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1])
return dp[m][n]
```
您可以尝试使用这个算法计算任意两个字符串的编辑距离。希望能对您有帮助!
哈希算法实现python给定一种规律pattern和一个字符串str
,判断这个字符串是否遵循这个规律。你可以使用正则表达式或者哈希表来实现。请问,你知道如何使用哈希表来实现吗?
很高兴回答你的问题!对于哈希表来说,我们可以将pattern和str的对应关系存储在一个字典中,然后遍历pattern和str,逐一比较它们对应的值是否相等。如果不相等,则说明不符合规律。如果遍历完整个pattern和str,都没有发现不符合规律的情况,那么就说明这个字符串遵循这个规律。