問題簡介
字符串有三種編輯操作,插入一個字符、刪除一個字符或者替換一個字符,給定兩個字符串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的