解题思路
1.判断两个字符串长度
如果大于1,则return false
如果两个字符串内容相等,则return true
如果两个字符串中有一个长度为0,则return true
2.如果字符串长度相等,则判断不等的字符是否仅有一个,并且位置相同
3.如果字符串长度不等,则判断将长字符串多余的字符去除,然后判断两个字符串是否完全相等
解题遇到的问题
1.字符串长度不等时,如何判断,如果只是通过长度,容易出现数组越界
2.字符串长度不等时,有一个字符串为空,需要提前处理掉
3.字符串长度做减法时,未取绝对值
后续需要总结学习的知识点
1.执行用时上,需要优化
##解法1
public class Main {
public static boolean oneEditAway(String first, String second) {
if (Math.abs(first.length() - second.length()) > 1) {
return false;
}
if (first.equals(second) || first.length() == 0 || second.length() == 0
|| first.contains(second) || second.contains(first)) {
return true;
}
if (first.length() == second.length()) {
return isOnlyOneForEquals(first, second);
} else {
if (first.length() > second.length()) {
return isContain(first, second);
} else {
return isContain(second, first);
}
}
}
public static boolean isContain(String longs, String shorts) {
char[] cs1 = longs.toCharArray();
char[] cs2 = shorts.toCharArray();
for (int i = 0; i < cs2.length; i++) {
if (cs1[i] != cs2[i]) {
longs = longs.substring(0, i) + longs.substring(i + 1);
break;
}
}
return longs.equals(shorts);
}
public static boolean isOnlyOneForEquals(String first, String second) {
int nums = 0;
char[] cs1 = first.toCharArray();
char[] cs2 = second.toCharArray();
for (int i = 0; i < cs1.length; i++) {
if (cs1[i] != cs2[i]) {
nums++;
}
}
return nums <= 1;
}
}