161. One Edit Distance
- Total Accepted: 20350
- Total Submissions: 68060
- Difficulty: Medium
- Contributors: Admin
Given two strings S and T, determine if they are both one edit distance apart.
Code
class Solution(object):
def isOneEditDistance(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
for idx, (chr_s, chr_t) in enumerate(zip(s, t)):
if chr_s != chr_t:
# when s and t have same length,
# the only possibility is they only differ at this index
if len(s) == len(t):
return s[idx+1:] == t[idx+1:]
# if s is longer than t, the only possibility is
# s has an insertion at idx
elif len(s) > len(t):
return s[idx+1:] == t[idx:]
# otherwise,, the only possibility is t has an insertion
# at idx
else:
return s[idx:] == t[idx+1:]
return abs(len(s) - len(t)) == 1
Idea
See comments. There are only three conditions to determine if two strings are one edit distance apart.
Reference: https://discuss.leetcode.com/topic/30308/my-clear-java-solution-with-explanation