zoukankan      html  css  js  c++  java
  • 161. One Edit Distance

    题目:

    Given two strings S and T, determine if they are both one edit distance apart.

    链接: http://leetcode.com/problems/one-edit-distance/

    题解:

    求两个字符串是否只有1个Edit Distance。 看着这道题又想起了Edit Distance那道。不过这道题不需要用DP,只用设一个boolean变量hasEdited来逐字符判断就可以了。写法大都借鉴了曹神的代码。用短的string和长的比较,假如字符不同,则hasEdited为true,假如s比t短,则下标i退回1来继续比较insert / delete的case。否则比较的是replace。

    Time Complexity - O(n), Space Complexity - O(1)。

    public class Solution {
        public boolean isOneEditDistance(String s, String t) {  // compare short string with long string
            if(s == null || t == null)
                return false;
            if(s.length() > t.length())
                return isOneEditDistance(t, s);
            if(t.length() - s.length() > 1)
                return false;
            boolean hasEdited = false;
            
            for(int i = 0, j = 0; i < s.length(); i++, j++) {           // detect if only 1 change need to be made
                if(s.charAt(i) != t.charAt(j)) {
                    if(hasEdited)
                        return false;
                    hasEdited = true;
                    if(s.length() < t.length())                         //if s.length() < t.length(), back up one letter and continue compare
                        i--;
                }
            }
            
          return hasEdited || (s.length() < t.length());    // (s.length() < t.length()) for insert case or delete case
        }
    }

    Update:

    把s.equals(t)的相等判断从尾部挪到头部了,这样尾部直接return true就可以了

    public class Solution {
        public boolean isOneEditDistance(String s, String t) {
            if(s == null || t == null || s.equals(t)) 
                return false;
            if(s.length() > t.length())
                return isOneEditDistance(t, s);
            if(t.length() - s.length() > 1)
                return false;
            
            boolean hasEdited = false;
            
            for(int i = 0, j = 0; i < s.length(); i++, j++) {
                if(s.charAt(i) != t.charAt(j)) {
                    if(hasEdited)
                        return false;
                    hasEdited = true;
                    if(s.length() < t.length())
                        i--;
                }
            }
            
            return true;
        }
    }

    二刷:

    依然是曹神的解法。

    Java:

    Time Complexity - O(n), Space Complexity - O(1)。

    public class Solution {
        public boolean isOneEditDistance(String s, String t) {
            if (s == null || t == null || s.equals(t) || Math.abs(s.length() - t.length()) > 1) return false;
            if (s.length() > t.length()) return isOneEditDistance(t, s);
            boolean hasDiff = false;
            for (int i = 0, j = 0; i < s.length(); i++, j++) {
                if (s.charAt(i) != t.charAt(j)) {
                    if (hasDiff) return false;
                    hasDiff = true;
                    if (s.length() < t.length()) i--;
                }
            }
            return true;
        }
    }
  • 相关阅读:
    JS判断鼠标移入元素的方向
    EJB开发第一个无状态会话bean、开发EJBclient
    Android摇一摇振动效果Demo
    吃饭与团队惬意
    Factorization Machines 学习笔记(三)回归和分类
    代理---视图间数据的传递:标签显示输入的内容【多个视图中】
    cocos2d-x v3.2 FlappyBird 各个类对象详细代码分析(7)
    金典 SQL笔记(4)
    用GDB调试多进程程序
    C程序设计的抽象思维-算法分析-大多数元素
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4489717.html
Copyright © 2011-2022 走看看