August 03, 2019

161. One Edit Distance

161. One Edit Distance

三种情况:

  • 两个string长度差>1 直接false
  • 两个string长度差=1 只能插入/删除一个字符
  • 两个string长度差=1 只能有一位不同
class Solution {
    public boolean isOneEditDistance(String s, String t) {
        // Make sure s is shorter than t.
        if (s.length() > t.length()) {
            return isOneEditDistance(t, s);
        }
        // return false if more than one edit
        if (t.length() - s.length() > 1) {
            return false;
        }
        // return false if no edit
        if (s.equals(t)) {
            return false;
        }
        
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) != t.charAt(i)) {
                if (s.length() == t.length()) {
                    return s.substring(i + 1).equals(t.substring(i + 1));
                } else {
                    return s.substring(i).equals(t.substring(i + 1));
                }
            }
        }
        return true;
    }
}

Another implementation:

class Solution {
    public boolean isOneEditDistance(String s, String t) {
        if (s.length() - t.length() < 0) {
            return isOneEditDistance(t, s);
        }
        if (s.length() - t.length() > 1) {
            return false;
        }
        if (s.equals(t)) {
            return false;
        }
        // s is longer than t or the same length as t
        boolean isOneEdit = false;
        int j = 0;
        boolean isReplace = s.length() == t.length();
        for (int i = 0; i < s.length(); i++) {
            if (j == t.length() || s.charAt(i) != t.charAt(j)) {
                if (isOneEdit) {
                    return false;
                }
                if (i == s.length() - 1) {
                    return true;
                }
                if (isReplace) {
                    if (s.charAt(i + 1) == t.charAt(j + 1)) {
                        isOneEdit = true;
                        j++;
                    } else {
                        return false;
                    }
                } else {
                    if (j == t.length()) {
                        return true;
                    } else if (s.charAt(i + 1) == t.charAt(j)) {
                        isOneEdit = true;
                    } else {
                        return false;
                    }
                }
            } else {
                j++;
            }
        }
        return true;
    }
}
comments powered by Disqus