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

97 阅读2分钟

方向一:学习方法与心得

最少操作前缀问题:

问题描述

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

问题分析

我们需要通过对字符串 S 进行若干次操作,使其变成字符串 T 的一个前缀。操作可以是修改 S 的某一个字符,或者删除 S 末尾的字符。目标是计算出最少需要多少次操作。

解题思路

  1. 比较字符串长度:首先,比较 S 和 T 的长度。如果 S 的长度大于 T 的长度,那么 S 需要删除一些字符,直到长度与 T 相同。
  2. 逐字符比较:从 S 和 T 的第一个字符开始,逐字符比较。如果字符相同,继续比较下一个字符;如果字符不同,则需要进行一次修改操作。
  3. 计算操作次数:统计需要修改的字符数和需要删除的字符数,两者之和即为最少操作次数。

代码框架

def solution(S: str, T: str) -> int: # 初始化操作次数 operations = 0

    # 获取字符串长度
    len_S = len(S)
    len_T = len(T)
    
    # 计算需要删除的字符数
    if len_S > len_T:
        operations += len_S - len_T
        # 截取S,使其长度与T相同
        S = S[:len_T]
    
    # 逐字符比较S和T
    for i in range(len(S)):
        if S[i] != T[i]:
            # 如果字符不同,增加一次修改操作
            operations += 1
    
    return operations

关键知识点总结

  1. 字符串操作

    • 字符串长度:使用 len(str) 获取字符串的长度。
    • 字符串切片:使用 str[:n] 获取字符串的前 n 个字符。
    • 字符串比较:使用 == 比较两个字符是否相同。
  2. 循环与条件判断

    • for 循环:使用 for i in range(len(str)) 遍历字符串的每个字符。
    • if 条件判断:使用 if 语句进行条件判断,例如 if len_S > len_T
  3. 计数器

    • 操作次数计数:使用一个变量 operations 来记录操作次数,并在每次操作时递增。
  4. 函数定义与调用

    • 函数定义:使用 def function_name(parameters): 定义一个函数。
    • 函数调用:使用 function_name(arguments) 调用函数。
  5. 测试与验证

    • 测试用例:在 if __name__ == '__main__': 块中编写测试用例,验证函数的正确性。

学习计划:每天一道题,难度随机

工具运用:利用Marscode AI帮助代码的思路构建和可行性检查