字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑
输入:
first = “pale”
second = “ple”
输出: True
分几种情况:
- 如果Math.abs(first.length()-second.length())>1那么直接返回false
- 如果first.length()==second.length(),那么就是用长度相等的判断方式,直接一位一位的进行比较即可
- 如果两者长度相差1,那么就利用双指针,从头开始判断,如果两者又不相同的字符,那么就将长的单词的指针向后移一位,然后继续比较即可
class Solution {
public boolean oneEditAway(String first, String second) {
if(Math.abs(first.length()-second.length())>1) return false;
if(first.length()==second.length()) return toEquals(first,second);
int res=0;
String str1,str2;
if(first.length()>second.length()){
return notEquals(second,first);
}else{
return notEquals(first,second);
}
}
//当str1和str2长度相同时候的判断
public boolean toEquals(String str1,String str2){
int ans=0;
for(int i=0;i<str2.length();i++){
if(str1.charAt(i)!=str2.charAt(i)){
ans++;
if(ans>1) return false;
}
}
return ans<=1;
}
//当str1与str2长度不等 且str1长度比str2长度小一
public boolean notEquals(String str1,String str2){
int res=0;
int i=0,j=0;
while(i<str1.length() &&j<str2.length()){
if(str1.charAt(i)!=str2.charAt(j)){
res++;
j++;
if(res>1) return false;
continue;
}
i++;
j++;
}
return res<=1;
}
}