在Python中编写计算有差异的子字符串的程序
假设我们有两个字符串s和t,我们需要找到一种方法,选择s的一个非空子串,并将其中一个单个字符替换为另一个不同的字符,以便得到的子串是t的子串之一。我们必须找到满足上述条件的子串数。
所以,如果输入是 s = “sts” t = “tsts”,那么输出将是6,因为以下是s和t的子串对,它们之间差异只有一个字符:
- (“sts”,“tsts”)
- (“sts”,“tsts”)
- (“sts”,“tsts”)
- (“sts”,“tsts”)
- (“sts”,“tsts”)
- (“sts”,“tsts”)
粗体字符部分是从两个字符串s和t中选择的子串。
为了解决这个问题,我们将遵循以下步骤:
- n1:= s的大小
- n2:= t的大小
- ans:= 0
- 对于s中的每个索引i1和字符c1,执行以下操作:
- 对于t中的每个索引i2和字符c2,执行以下操作:
- i : = i1,j: = i2
- 当i
- i : = i + 1,j: = j + 1
- 如果i
- := i + 1,j: = j + 1
- ans:= ans + 1
- 当i
- i : = i + 1,j: = j + 1
- ans:= ans + 1
- 对于t中的每个索引i2和字符c2,执行以下操作:
- 则返回ans
例子
让我们看下面的实现,以获得更好的理解 –
def solve(s, t):
n1 = len(s)
n2 = len(t)
ans = 0
for i1, c1 in enumerate(s):
for i2, c2 in enumerate(t):
i = i1
j = i2
while i < n1 and j < n2 and s[i] == t[j]:
i += 1
j += 1
if i < n1 and j < n2 and s[i] != t[j]:
i += 1
j += 1
ans += 1
while i < n1 and j < n2 and s[i] == t[j]:
i += 1
j += 1
ans += 1
return ans
s = "sts"
t = "tsts"
print(solve(s, t))
输入
“sts”,“tsts”
输出
6