Skip to content

面试题 01.05. 一次编辑

Posted on:2022年10月26日 at 14:18

面试题 01.05. 一次编辑

leetcode 链接

解法一:三指针 + 头尾遍历

如果两个字符串为空则返回 true

如果两个字符串长度相差超过 1,则返回 false

然后开始从第一位比较字符串,直到遇到不同的字符,记住下标i

再从两个字符串末尾开始比较,直到遇到不同的字符,记住两个下标 jk

此时可以成功的情况只有以下两种种:

1、j + 1k + 1 等于 i(前面已经判断,字符串长度差不会大于 1,所以这种情况下,差异不会超过 1 位);

2、jki 三者值相等

/**
 * @param {string} first
 * @param {string} second
 * @return {boolean}
 */
var oneEditAway = function (first, second) {
  if (!first || !second) {
    return true;
  }
  const fl = first.length;
  const sl = second.length;
  if (Math.abs(fl - sl) > 1) {
    return false;
  }
  let i = 0;
  while (first[i] === second[i] && i < fl && i < sl) {
    i++;
  }
  if (i === fl || i === sl) {
    return true;
  }
  let j = fl,
    k = sl;
  while (first[j] === second[k]) {
    j--;
    k--;
  }
  if (j + 1 === i || k + 1 === i || (j === k && j === i)) {
    return true;
  }
  return false;
};