The concept is relatively simple:
Iterate through the minimum string, seeing if the char at i isn't equal. When this occurs, we know we need to do one of the following:
- Replace a character at i (Compare the rest of the strings for match at i + 1)
- Delete a character from s if its longer than t (Compare s[i:] to t[i + 1:]
- Add a character to s if its shorter than t (Compare s[i + 1:] to t[i:])
Finally, if none are different, we know that this can only be valid if s or t is missing a character at the end. Thus, check the lengths of the two to see if they're one away.
def isOneEditDistance(self, s, t): for i in range(min(len(s), len(t))): if s[i] != t[i]: return s[i + (len(s) >= len(t)):] == t[i + (len(s) <= len(t)):] return abs(len(s) - len(t)) == 1