问题描述
小U和小R有两个字符串,分别是SS和TT,现在小U需要通过对SS进行若干次操作,使其变成TT的一个前缀。操作可以是修改SS的某一个字符,或者删除SS末尾的字符。现在你需要帮助小U计算出,最少需要多少次操作才能让SS变成TT的前缀。
看到这个我一开始就想到的时候是用bfs去维护最小值,但是后面仔细发现这个可以直接遍历来维护,因为当T和S中的短的哪一个遍历完之后整个变换的最小次数就已经确定了下来,还有就是一个次数的初始化的值要考虑T和S的长度大小 int counts=S.length()>T.length()?S.length()-T.length():0; 遍历中每当遇到T和S不相同时就执行一次修改操作
ac代码如下 public class Main { public static int solution(String S, String T) { // PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE // write code here if(T.contains(S)){ return 0; } int counts=S.length()>T.length()?S.length()-T.length():0;
for(int i=0;i<Math.min(S.length(), T.length());i++){
if(S.charAt(i)!=T.charAt(i)){
counts++;
}
}
return counts;
}
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);
}
}