用 Python 编写一个程序来计算相差一个字符的子字符串
pythonserver side programmingprogramming更新于 2025/11/30 3:56:17
假设我们有两个字符串 s 和 t,我们必须找出有多少种方法可以选择 s 的一个非空子字符串,并用另一个不同的字符替换一个字符,使得生成的子字符串是 t 的子字符串之一。我们必须找出满足上述条件的子字符串的数量。
因此,如果输入为 s = "sts" t = "tsts",则输出将为 6,因为以下是从 s 和 t 中相差 1 个字符 − 的子字符串对。
- ("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 < n1 且 j < n2 且 s[i] 与 t[j] 相同时,执行
- i := i + 1, j := j + 1
- 如果 i < n1 且 j < n2 且 s[i] 与 t[j] 不同,则
- := i + 1, j := j + 1
- ans := ans + 1
- 当 i < n1 且 j < n2 且 s[i] 与 t[j] 相同时,则
- 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

