15. 最少前缀操作问题 | 豆包MarsCode AI刷题

153 阅读2分钟

今天我们来看一道中等难度的题目:

问题描述

小U和小R有两个字符串,分别是SS和TT,现在小U需要通过对SS进行若干次操作,使其变成TT的一个前缀。操作可以是修改SS的某一个字符,或者删除SS末尾的字符。现在你需要帮助小U计算出,最少需要多少次操作才能让SS变成TT的前缀。


测试样例

样例1:

输入:S = "aba", T = "abb"
输出:1

样例2:

输入:S = "abcd", T = "efg"
输出:4

样例3:

输入:S = "xyz", T = "xy"
输出:1

样例4:

输入:S = "hello", T = "helloworld"
输出:0

样例5:

输入:S = "same", T = "same"
输出:0

首先我们要确定S和T的最长公共前缀
确定两个字符串 S 和 T 的最长公共前缀是一个常见的问题,可以通过简单的遍历来实现。最长公共前缀是指 S 和 T 从头开始相同的最长子串。

解题思路

  1. 理解问题:我们需要找到 S 和 T 的最长公共前缀。

  2. 数据结构选择:使用字符串操作。

  3. 算法步骤

    • 遍历 S 和 T,比较对应位置的字符。
    • 如果字符相同,继续比较下一个字符。
    • 如果字符不同,或者其中一个字符串已经遍历完,停止遍历。
    • 记录遍历到的位置,即为最长公共前缀的长度。

我们可以给出关键步骤:

  1. 初始化最长公共前缀的长度common_prefix_length = 0
  2. 遍历字符串for i in range(min(len(S), len(T)))
  3. 比较字符if S[i] == T[i]: common_prefix_length += 1
  4. 停止遍历else: break

然后给出代码:

def solution(S: str, T: str) -> int:
    # 初始化操作次数
    operations = 0
    
    # 遍历字符串 S 和 T
    for i in range(min(len(S), len(T))):
        # 如果字符不同,记录修改操作的次数
        if S[i] != T[i]:
            operations += 1
    
    # 如果 S 的长度大于 T 的长度,记录删除操作的次数
    if len(S) > len(T):
        operations += len(S) - len(T)
    
    return operations

接着输入各种测试用例进行测试:

if __name__ == '__main__':
    print(solution("aba", "abb") == 1)
    print(solution("abcd", "efg") == 4)
    print(solution("xyz", "xy") == 1)
    print(solution("hello", "helloworld") == 0)
    print(solution("same", "same") == 0)

通过使用豆包MarsCode可以有效的节省时间,遇到不会的问题也可以咨询他,对刷题具有极大的帮助。对于学习计算机的同学来说,这也是一个极好的工具。目前豆包MarsCode也是完全免费的。
单击run,查看控制台,全部都是True,基本通过!

单击提交提交通过,该题目完成。