python简单算法05:字符串s1和s2,s1是否只需一次或零次变换成为s2

问题简介
解答

问题简介

字符串有三种编辑操作,插入一个字符、删除一个字符或者替换一个字符,给定两个字符串s1和s2,s1是否只需一次或零次变换成为s2。
例如:
输入:
s1=“spend”
s2=“speed”
输出:
True

解答

思路:对于替换:长度相同,不相同字符只能为一个,依次遍历字符串计算不相同的字符个数即可;对于插入和删除:长度不等且相差为1,则长串某一位去掉之后可以匹配短串。
上代码:

def change(s1,s2):
    lists1=list(s1)
    lists2=list(s2)
    not_same=[]
    #长度相同,不同字符只能出现一次
    if len(lists1)==len(lists2):
        not_same=[x for x,y in zip(lists1,lists2) if x!=y]      #并行遍历:zip,zip返回zip迭代对象,可以包在list调用中显示结果
    if len(not_same) in [0,1]:
        return True
    else:
        return False
    #长度不同,去掉长的某一位可以变成另一个
    if len(lists1)-len(lists2)==1 or -1:
        maxlist=(lists1 if (len(lists1)>len(lists2)) else lists2)
        minlist=(lists1 if (len(lists1)<len(lists2)) else lists2)
        for i in range(len(maxlist)):
            return maxlist[:i]+maxlist[i+1:]==minlist        #lists1[:i]+lists1[i+1:] 即去掉下标为i的

在这里插入图片描述

发布了17 篇原创文章 · 获赞 17 · 访问量 1153

猜你喜欢

转载自blog.csdn.net/baidu_41304382/article/details/104695748