提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目描述
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = “pale”
second = “ple”
输出: True
示例 2:
输入:
first = “pales”
second = “pal”
输出: False
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/one-away-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题过程
解题思路
双指针:首先初始判断两个字符串的长度差是否超过1,是的话直接返回false。同时,如果两个字符串相等直接返回true。
定义双指针i,j,同时设置一个操作计数变量记录不等的字符数。
循环中判断两个指针指向的字符是否相等,相等则跳过此次循环,不相等则count计数加1,当count超过1的时候直接返回false;count还没超过,则判断两个字符串长度是否相等,不等则短的那个指针后退一格。
完整代码:
class Solution {
public boolean oneEditAway(String first, String second) {
int m = first.length();
int n = second.length();
if (Math.abs(m - n) > 1) return false;//两个字符串长度超过2
if (first.equals(second)) return true;
int i = 0;
int j = 0;
int count = 0;
while (i < m && j < n){
if (first.charAt(i++) == second.charAt(j++)){
continue;
}
count++;
if(count > 1){
return false;
}
if (m != n){
if (m < n){//i位置和j位置的字符不相等,短的字符串索引后退一格,相当于长的字符串跳过了一个字符
i--;
}else{
j--;
}
}
}
return true;
}
}
总结
暂时没有总结,待续。。。