题目
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = “pale”
second = “ple”
输出: True示例 2:
输入:
first = “pales”
second = “pal”
输出: False来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/one-away-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
首先,两个字符串长度相差大于1肯定返回false。
然后,同时遍历两个字符串,记录不同的字符数,遇到不同的字符时,根据两个字符串的长度关系进行下一步操作:
如果长度相等,那么接着遍历;
如果不同,说明一长一短,且相差1,如果满足题意,必须是删除长度较长的字符串当前字符后,两个串应该相同,那么跳过该字符,后面的字符应该完全相同。实现上,因为每一轮都会两个指针++,那么将较短字符串的指针—,然后再一起++,剩下需要比较的字符个数就一样多了。如果出现不同的字符数大于1,返回false,否则返回true。
代码
class Solution {public boolean oneEditAway(String first, String second) {int n = first.length();int m = second.length();if (n - m > 1 || m - n > 1) {return false;}int diff = 0;int i = 0;int j = 0;while (i < n && j < m) {if (first.charAt(i) != second.charAt(j)) {diff++;if (diff >= 2) {return false;}if (n > m) {j--;}if (m > n) {i--;}}i++;j++;}return true;}}
