题目
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = “pale”
second = “ple”
输出: True
解题思路
通过题意可知,若想最多通过一次编辑完成,两字符串中最多只能有一位不同
- 字符串长度差>1,无法通过一次编辑完成,返回false
- 字符串长度差==1,
- 两个字符串只有一个字符不同返回true
- 否则返回false
- 字符串长度相同
- 两个字符串相等,返回true
- 两字符串只有一个字符不同,返回true
- 两字符串不同字符数量>1,返回false
代码
class Solution {
public boolean oneEditAway(String first, String second) {
// lStr是长字符串,sStr是短字符串
String lStr = first.length() >= second.length() ? first : second,
sStr = first.length() < second.length() ? first : second;
// diff是字符串中不同的字符数量,sStrIdx是短字符串的index,lStrIdx是长字符串的index
int diff = 0, sStrIdx = 0, lStrIdx = 0;
// 如果两个字符串长度差>1,即字符串中不同的字符数量>1,则无法通过一次编辑完成,返回false
if (lStr.length() - sStr.length() > 1) return false;
while (sStrIdx < sStr.length()) {
if (sStr.charAt(sStrIdx++) != lStr.charAt(lStrIdx++)) {
// 如果字符串长度不同,此时只将长字符串的index向后移动一位
if (lStr.length() != sStr.length()) sStrIdx--;
// 字符串不同字符数量+1
diff++;
}
// 字符串中不同的字符数量>1,则无法通过一次编辑完成,返回false
if (diff > 1) return false;
}
return true;
}
}