同向双指针

  • 这题注意审题

  • 两个edge case:"a"->"" return true, "abc"->"abc" return false

  • 可以 用两个指针i, j来 iterate两个string

  • 并用一个boolean found=false来记录是否有不一样的char

  • 如果遇到不一样的char需要判断是否之前已经有过不一样的char

  • 如果是第一次不一样的话根据比较s.length和t.length来判断i-- or j--

    public boolean isOneEditDistance(String s, String t) {
        if (Math.abs(s.length() - t.length()) > 1 || s.equals(t)) return false;
        boolean found = false;
        //2 pointers
        int i = 0, j = 0;
        while (i < s.length() && j < t.length()) {
            if (s.charAt(i) != t.charAt(j)) {
                if (found) return false;
                found = true;
                if (s.length() < t.length()) {
                    i--;
                } else if (s.length() > t.length()) {
                    j--;
                }
            }
            i++;
            j++;
        }
        return true;
    }

Edit Distance

Last updated

Was this helpful?