zoukankan      html  css  js  c++  java
  • Leetcode: One Edit Distance

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

    注意这道题:Must be exactly one distance apart. Not the same.

     1 public class Solution {
     2     public boolean isOneEditDistance(String s, String t) {
     3         for (int i=0; i<Math.min(s.length(), t.length()); i++) {
     4             if (s.charAt(i) != t.charAt(i)) {
     5                 if (s.length() == t.length()) 
     6                     return s.substring(i+1).equals(t.substring(i+1));
     7                 else if (s.length() < t.length()) {
     8                     return s.substring(i).equals(t.substring(i+1));
     9                 }
    10                 else return t.substring(i).equals(s.substring(i+1));
    11             }
    12         }
    13         
    14         //Corner case, last char
    15         return Math.abs(s.length() - t.length()) == 1;
    16     }
    17 }

     另外FB面经有一道比较狠的这个题的变形:

    class IntFileIterator {
      boolean hasNext();
      int next();
    }
    
    class{
      public boolean isDistanceZeroOrOne(IntFileIterator a, IntFileIterator b);
    
    }
    // return if the distance between a and b is at most 1.. 
    // Distance: minimum number of modifications to make a=b
    // Modification:
    //   1. change an int in a
    //   2. insert an int to a
    //   3. remove an int from a

    这题就是one edit distance的变形题,难点在于给的Iterator,事先不知道两个file
    的长度,也不允许用extra space(所以不能转成两个string再比),那么一个个往前
    跑的时候就得三种情况都考虑。。。。

    我的做法:

     1 public class Solution {
     2     class IntFileIterator {
     3         boolean hasNext();
     4         int next();
     5     }
     6     
     7     public boolean isDistanceZeroOrOne(IntFileIterator a, IntFileIterator b) {
     8         return check(a, b, 0);
     9     }
    10   
    11       public boolean check(IntFileIterator a, IntFileIterator b, int distance){
    12           IntFileIterator aa = new InFileIterator(a); // copy of iterator a before next() function
    13           IntFileIterator bb = new InFileIterator(b);
    14           while (a.hasNext() && b.hasNext()) {
    15               int s = a.next();
    16               int t = b.next();
    17               if(s != t){
    18                   IntFileIterator aaa = new InFileIterator(a); //copy of iterator a after next() function
    19                   IntFileIterator bbb = new InFileIterator(b);
    20                   distance++;
    21                   if(distance>1) return false;
    22                   return check(aa, b, distance) || check(a, bb, distance) || check(aaa, bbb, distance);
    23               }
    24               else{
    25                   return check(a, b, distance);
    26               }
    27           }
    28           
    29           if(distance == 1){
    30               return !a.hasNext() && !b.hasNext();
    31           }else { //(distance ==0)
    32               IntFileIterator k = a.hasNext()? a : b;
    33               int count = 0;
    34               while (k.hasNext()) {
    35                   k.next();
    36                   count++;
    37               }
    38               return k<=1;
    39           }
    40       }
    41 }
  • 相关阅读:
    NetBeansRCP-添加/修改NetBeans的JVM启动参数
    (OK) install Android Studio 3.2 preview on Fedora 27
    (OK) Research, implementation, and improvement of MPTCP on mobile smart devices
    android-ktx
    ARM要risk(危险)了!开源的RISC-V来了,这不是危言耸听!
    表情符号大全
    (OK) Fedora 27
    Latex写算法的伪代码排版
    中国论文数超过美国 施一公:“垃圾文章”太多
    TCP/IP重传超时--RTO
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4245378.html
Copyright © 2011-2022 走看看