LeetCode Solutions

161. One Edit Distance

Time: $O(\min(|\texttt{s}|, |\texttt{t}|))$

Space: $O(1)$

			

class Solution {
 public:
  bool isOneEditDistance(string s, string t) {
    const int m = s.length();
    const int n = t.length();
    if (m > n)  // Make sure len(s) <= len(t)
      return isOneEditDistance(t, s);

    for (int i = 0; i < m; ++i)
      if (s[i] != t[i]) {
        if (m == n)
          return s.substr(i + 1) == t.substr(i + 1);  // Replace s[i] with t[i]
        return s.substr(i) == t.substr(i + 1);        // Delete t[i]
      }

    return m + 1 == n;  // Delete t[-1]
  }
};
			

class Solution {
  public boolean isOneEditDistance(String s, String t) {
    final int m = s.length();
    final int n = t.length();
    if (m > n) // Make sure len(s) <= len(t)
      return isOneEditDistance(t, s);

    for (int i = 0; i < m; ++i)
      if (s.charAt(i) != t.charAt(i)) {
        if (m == n)
          return s.substring(i + 1).equals(t.substring(i + 1)); // Replace s[i] with t[i]
        return s.substring(i).equals(t.substring(i + 1));       // Delete t[i]
      }

    return m + 1 == n; // Delete t[-1]
  }
}
			

class Solution:
  def isOneEditDistance(self, s: str, t: str) -> bool:
    m = len(s)
    n = len(t)
    if m > n:  # Make sure len(s) <= len(t)
      return self.isOneEditDistance(t, s)

    for i in range(m):
      if s[i] != t[i]:
        if m == n:
          return s[i + 1:] == t[i + 1:]  # Replace s[i] with t[i]
        return s[i:] == t[i + 1:]  # Delete t[i]

    return m + 1 == n  # Delete t[-1]