做题笔记:最少前缀操作问题
题目解析与思路
问题理解
题目要求通过对字符串 S 进行若干次操作,使其变成字符串 T 的一个前缀。操作可以是修改 S 的某一个字符,或者删除 S 末尾的字符。目标是计算出最少需要多少次操作才能让 S 变成 T 的前缀。
数据结构与算法步骤
-
遍历字符串:从字符串的开头开始,逐个字符比较
S和T。 -
记录操作次数:
- 如果当前字符相同,继续比较下一个字符。
- 如果当前字符不同,记录一次修改操作,并继续比较下一个字符。
-
处理剩余字符:
- 如果
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);
}
}
#### 总结知识点
- 字符串操作:理解字符串的基本操作,如比较字符、修改字符、删除字符。
- 遍历与计数:掌握如何遍历字符串并记录操作次数。
- 边界条件处理:处理字符串长度不一致的情况。
学习建议
- 基础练习:从简单的字符串操作开始,逐步增加难度。
- 理解算法:通过图解和实际例子理解算法的每一步。
- 代码实现:尝试自己实现代码,并通过测试样例验证。
- 优化思考:思考是否有更优的算法或数据结构可以减少操作次数。