161.One Edit Distance

Posted 我的名字叫周周

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了161.One Edit Distance相关的知识,希望对你有一定的参考价值。

    /*
     * 161.One Edit Distance
     * 2016-6-2 by Mingyang
     * Given two strings S and T, determine if they are both one edit distance apart.
     * 两个字符串一样长的时候,说明有一个替换操作,我们只要看对应位置是不是只有一个字符不一样就行了
     * 一个字符串比另一个长1,说明有个增加或删除操作,我们就找到第一个对应位置不一样的那个字符,
     * 如果较长字符串在那个字符之后的部分和较短字符串那个字符及之后的部分是一样的,则符合要求
     * 如果两个字符串长度差距大于1,肯定不对
     * 注意,在两个相差距离1的时候是不能用contain的,因为有可能差在中间,要先找到第一个不一样的
     * 然后后面的substring必须相等
     */
    public boolean isOneEditDistance(String s, String t) {
        int m = s.length(), n = t.length();
        if(m == n) return isOneModified(s, t);
        if(m - n == 1) return isOneDeleted(s, t);
        if(n - m == 1) return isOneDeleted(t, s);
        // 长度差距大于2直接返回false
        return false;
    }   
    private boolean isOneModified(String s, String t){
        boolean modified = false;
        // 看是否只修改了一个字符
        for(int i = 0; i < s.length(); i++){
            if(s.charAt(i) != t.charAt(i)){
                if(modified) return false;
                modified = true;
            }
        }
        return modified;
    }  
    public boolean isOneDeleted(String longer, String shorter){
        // 找到第一组不一样的字符,看后面是否一样
        for(int i = 0; i < shorter.length(); i++){
            if(longer.charAt(i) != shorter.charAt(i)){
                return longer.substring(i + 1).equals(shorter.substring(i));
            }
        }
        return true;
    }

 

以上是关于161.One Edit Distance的主要内容,如果未能解决你的问题,请参考以下文章

161.One Edit Distance

Leetcode 161: One Edit Distance

LeetCode161. One Edit Distance

LeetCode161. One Edit Distance

161. One Edit Distance

leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java