做题笔记:最少前缀操作问题 | 豆包MarsCode AI刷题

73 阅读2分钟

做题笔记:最少前缀操作问题

题目解析与思路

问题理解

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

数据结构与算法步骤

  1. 遍历字符串:从字符串的开头开始,逐个字符比较 S 和 T

  2. 记录操作次数

    • 如果当前字符相同,继续比较下一个字符。
    • 如果当前字符不同,记录一次修改操作,并继续比较下一个字符。
  3. 处理剩余字符

    • 如果 S 的长度大于 T 的长度,记录删除操作的次数,即 S 比 T 多出的字符数。

图解

假设 S = "abcd"T = "abef"

  • 比较 a 和 a,相同,继续。
  • 比较 b 和 b,相同,继续。
  • 比较 c 和 e,不同,记录一次修改操作。
  • 比较 d 和 f,不同,记录一次修改操作。
  • S 的长度等于 T 的长度,不需要删除操作。

最终操作次数为 2。

代码详解

public class Main {
public static int solution(String S, String T) {
    int operations = 0;
    int lenS = S.length();
    int lenT = T.length();

    int i = 0;
    while (i < lenS && i < lenT) {
        if (S.charAt(i) != T.charAt(i)) {
            operations++;
        }
        i++;
    }

    if (lenS > lenT) {
        operations += lenS - lenT;
    }

    return operations;
}

public static void main(String[] args) {
    System.out.println(solution("aba", "abb") == 1);
    System.out.println(solution("abcd", "efg") == 4);
    System.out.println(solution("xyz", "xy") == 1);
    System.out.println(solution("hello", "helloworld") == 0);
    System.out.println(solution("same", "same") == 0);
}
}
#### 总结知识点
  • 字符串操作:理解字符串的基本操作,如比较字符、修改字符、删除字符。
  • 遍历与计数:掌握如何遍历字符串并记录操作次数。
  • 边界条件处理:处理字符串长度不一致的情况。

学习建议

  1. 基础练习:从简单的字符串操作开始,逐步增加难度。
  2. 理解算法:通过图解和实际例子理解算法的每一步。
  3. 代码实现:尝试自己实现代码,并通过测试样例验证。
  4. 优化思考:思考是否有更优的算法或数据结构可以减少操作次数。