161. One Edit Distance
Given two stringss andt, determine if they are both one edit distance apart.
Note:
There are 3 possiblities to satisify one edit distance apart:
- Insert a character into s to get t
- Delete a character from s _to get t_
- Replace a character of s _to get t_
Example 1:
Input: s = "ab", t = "acb"
Output: true
Explanation: We can insert 'c' into s to get t.
Example 2:
Input:s = "cab", t = "ad"
Output: false
Explanation: We cannot get t from s by only one step.
Example 3:
Input:s = "1203", t = "1213"
Output: true
Explanation: We can replace '0' with '1' to get t.
Thoughts:
- Compare the string until first no equal char meet:
- return a[i+1:] == b[i:] # for deleteing ith element in a (assume a is longer than b)
- return a[i+1:] == b[i+1] # for replacing one to the other
- if two strings are equal in min(len(a),len(b)) return whether the distance is within 1 # for insert shorter one the last element from the longer one at the end
Code
class Solution(object):
def isOneEditDistance(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
m, n = len(s), len(t)
for i in range(min(m,n)):
if s[i] != t[i]:
if m > n:
return s[i+1:] == t[i:] # delete s[i]
elif m == n:
return s[i+1:] == t[i+1:] # replace
else:
return s[i:] == t[i+1:] # delete t[i]
return abs(m - n) == 1