一次编辑
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = “pale”
second = “ple”
输出: True
示例 2:
输入:
first = “pales”
second = “pal”
输出: False
思路:可以用纯模拟的思想来实现,考虑插入、删除、替换三种情况,其中插入和删除在一定意义上可以转换,first和second相差一个字符时,交换它们,就相当于只需要考虑删除的情况了,另外把相差字符超过1的情况剔除掉,进一步把问题简化成只需要考虑删除和替换这两种情况的编辑是否合法
class Solution {
public boolean oneEditAway(String first, String second) {
//插入字符的情况
if(second.length()-first.length()>1){ //如果需要插入两个字符才能实现变化,返回false
return false;
}
if(second.length()-first.length()==1){//插入一个字符的话,可以交换彼此,统一用后续的实现来判断
String temp = first;
first = second;
second = temp;
}
//删除字符的情况
if(first.length()-second.length()>1){//需要删除的字符大于1,返回false
return false;
}
//删除的字符为1个,通过一个循环来不断删除,不断比较判断
if(first.length()-second.length()==1){
for(int i=0;i<first.length();i++){
StringBuffer str = new StringBuffer(first);
str.replace(i,i+1,"");
String ss = str.toString();
if(ss.equals(second)){
return true;
}
}
return false;
}
//替换字符的情况
int ans = 0;
for(int i=0;i<first.length();i++){
if(first.charAt(i)!=second.charAt(i)){
ans++;
}
}
//替换的字符超过2,返回false
if(ans>1){
return false;
}
return true;
}
}