Snapchat面试题:一次编辑距离
描述
给定两个字符串 S 和 T, 判断T是否可以通过对S做刚好一次编辑得到。
每次编辑可以选择以下任意一个操作:
- 在S的任意位置插入一个字符
- 删除S中的任意一个字符
- 将S中的任意字符替换成其他字符
样例1
输入: s = "aDb", t = "adb"
输出: true
样例2
输入: s = "ab", t = "ab"
输出: false
解释:
s=t ,所以他们不相差一次编辑的距离
解题思路
若两个字符串长度相差大于1或相等,直接返回false。 反之,顺序判断每一位是否相等,若不相等,执行修改操作。 最后判断一下即可。
源代码
class Solution:
# @param {string} s a string
# @param {string} t a string
# @return {boolean} true if they are both one edit distance apart or false
def isOneEditDistance(self, s, t):
# Write your code here
m = len(s)
n = len(t)
if abs(m - n) > 1:
return False
if m > n:
return self.isOneEditDistance(t, s)
for i in xrange(m):
if s[i] != t[i]:
if m == n:
return s[i + 1:] == t[i + 1:]
return s[i:] == t[i + 1:]
return m != n