码迷,mamicode.com
首页 > 其他好文 > 详细

161.One Edit Distance

时间:2016-06-03 11:21:24      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

    /*
     * 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

标签:

原文地址:http://www.cnblogs.com/zmyvszk/p/5555599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!