640. 一次编辑距离

640. 一次编辑距离

中文English

给定两个字符串 S 和 T, 判断T是否可以通过对S做刚好一次编辑得到。
每次编辑可以选择以下任意一个操作:

  • 在S的任意位置插入一个字符
  • 删除S中的任意一个字符
  • 将S中的任意字符替换成其他字符

样例

例1:

输入: s = "aDb", t = "adb" 
输出: true

例2:

输入: s = "ab", t = "ab" 
输出: false
解释:
s=t ,所以他们不相差一次编辑的距离
 
 
输入测试数据 (每行一个参数)如何理解测试数据?

 分情况考虑,插入和删除 + 替换情况

class Solution:
    """
    @param s: a string
    @param t: a string
    @return: true if they are both one edit distance apart or false
    """
    def isOneEditDistance(self, s, t):
        # write your code here
        #分三种情况,一个是插入,一个是删除,一个是替换
        
        len1, len2 = len(s), len(t)
        if (abs(len1 - len2) > 1): return False 
        if (s == t): return False 
        
        left = 0
        
        #如果是插入的话
        if (len1 < len2):
            return self.isOne(s, t)
        elif (len1 > len2):
            return self.isOne(t, s)
        else:
            count = 0 
            while left < len1:
                if s[left] != t[left]:
                    count +=1 
                
                left += 1 
            
            return False if (count > 1) else True  
    
    def isOne(self, s, t):
        length = len(s)
        left = 0 
        
        #同时走,当走到不同的时候停止
        while left < length:
            if s[left] != t[left]:
                #此时指向右一个
                break
            
            left += 1 
        
        return s[left: ] == t[left + 1: ]                      

 

 
posted @ 2020-06-30 23:11  风不再来  阅读(182)  评论(0编辑  收藏  举报