给定两个字符串 s 和 t ,如果它们的编辑距离为 1 ,则返回 true ,否则返回 false

字符串 s 和字符串 t 之间满足编辑距离等于 1 有三种可能的情形:

  • s 中插入 恰好一个 字符得到 t
  • s 中删除 恰好一个 字符得到 t
  • s 中用 一个不同的字符 替换 恰好一个 字符得到 t

 

示例 1:

输入: s = "ab", t = "acb"
输出: true
解释: 可以将 'c' 插入字符串 s 来得到 t

示例 2:

输入: s = "cab", t = "ad"
输出: false
解释: 无法通过 1 步操作使 s 变为 t

 

提示:

  • 0 <= s.length, t.length <= 104
  • s 和 t 由小写字母,大写字母和数字组成
Related Topics
  • 双指针
  • 字符串

  • 👍 106
  • 👎 0
  • 简单逐字符比较

    比较简单,就挨个比较没啥太多细节,动态规划解法的话,还是有点点复杂的,不过拿来做这题有点过了

    class Solution {
        public boolean isOneEditDistance(String s, String t) {
            if (s.length() - t.length() > 1 || t.length() - s.length() > 1){
                return false;
            }
            if (s.length() == t.length()){
                return checkSameLength(s,t);
            }
    
            if (s.length() > t.length()){
                return checkOneCharDiff(s,t);
            }else{
                return checkOneCharDiff(t,s);
            }
        }
    
        public boolean checkOneCharDiff(String s, String t){
            int sIdx = 0;
            int tIdx = 0;
            int sameCount = 0;
            while (tIdx<t.length() && s.charAt(sIdx) == t.charAt(tIdx)){
                sIdx++;
                tIdx++;
                sameCount++;
            }
            sIdx++;
            while (tIdx<t.length() && s.charAt(sIdx) == t.charAt(tIdx)){
                sIdx++;
                tIdx++;
                sameCount++;
            }
            return s.length()-sameCount == 1;
        }
    
        public boolean checkSameLength(String s, String t){
            int sIdx = 0;
            int tIdx = 0;
            int sameCount = 0;
            while (sIdx<s.length() && s.charAt(sIdx) == t.charAt(tIdx)){
                sIdx++;
                tIdx++;
                sameCount++;
            }
            sIdx++;
            tIdx++;
            while (sIdx<s.length() && s.charAt(sIdx) == t.charAt(tIdx)){
                sIdx++;
                tIdx++;
                sameCount++;
            }
            return s.length()-sameCount == 1;
        }
    }