[英]Can someone explain me this leetcode string manipulation question?
我刚开始做一些 leetcode 问题,并不确定为什么在这个问题中,我们考虑了 2 个单词相等的情况。 这是一个问题陈述:
给定两个小写字母字符串 A 和 B,如果可以交换 A 中的两个字母使结果等于 B,则返回 true,否则返回 false。
交换字母定义为采用两个索引 i 和 j(0 索引),使得 i != j 并交换 A[i] 和 A[j] 处的字符。 例如,在“abcd”中的索引 0 和 2 处交换导致“cbad”这是一个解决方案
def buddyStrings(self, A, B):
if len(A) != len(B): return False
if A == B and len(set(A)) < len(A): return True
dif = [(a, b) for a, b in zip(A, B) if a != b]
return len(dif) == 2 and dif[0] == dif[1][::-1]
我不明白为什么我们考虑第二个 if 条件以及这个列表理解如何在 3 if 中工作。 我将不胜感激任何帮助。
以下是检查:
def buddyStrings(self, A, B):
if len(A) != len(B): return False # can't be true if lengths not equal
if A == B and len(set(A)) < len(A): return True # if same letter appears twice in word
dif = [(a, b) for a, b in zip(A, B) if a != b] # get letters that don't match
return len(dif) == 2 and dif[0] == dif[1][::-1] # if mismatch length is 2 and mismatch of first letter is reverse of mismatch of second letter
dif = [(a, b) for a, b in zip(A, B) if a != b]
它在同一位置找到所有彼此不相等的字符。 对于 ABCDE 和 FGCDE
dif = [('A','F'), ('B','G')]
我想也许这会是一个简化版:
class Solution:
def buddyStrings(self, A, B):
if len(A) != len(B):
return False
if A == B and len(set(A)) < len(A):
return True
diff = []
for i in list(zip(A, B)):
if i[0] != i[1]:
diff.append(i)
return len(diff) == 2 and diff[0] == diff[1][::-1]
for i in list(zip(A, B))
表示 A 和 B 中的一对。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.