📅  最后修改于: 2023-12-03 15:26:44.278000             🧑  作者: Mango
在有两个字符串时,我们可以通过交换字符串中的某些字符,使两个字符串完全相等。现在,给定两个字符串s1和s2,判断是否存在一种交换方式,能够使得s1和s2完全相等。
输入:s1 = "abcd", s2 = "badc"
输出:true
说明:通过交换字符串中的字符,可以使s1变为s2。
输入:s1 = "abc", s2 = "def"
输出:false
说明:无法通过交换字符串中的字符,使s1变为s2。
分别遍历两个字符串,记录下不相等的字符及其出现的次数。如果不相等字符的种类和数量都为2,且对应字符的数量相同,则说明可以通过交换使两个字符串相等。
class Solution:
def areAlmostEqual(self, s1: str, s2: str) -> bool:
"""
:param s1: 字符串1
:param s2: 字符串2
:return: 是否可通过交换使两个字符串相等
"""
if s1 == s2:
return True
# 不相等字符的个数
count = 0
# 记录不相等字符及其出现的次数
char_dict = {}
for i in range(len(s1)):
if s1[i] != s2[i]:
count += 1
char_dict[s1[i]] = char_dict.get(s1[i], 0) + 1
char_dict[s2[i]] = char_dict.get(s2[i], 0) - 1
# 不相等字符的种类和数量都为2,且对应字符的数量相同
return count == 2 and all([i == 0 for i in char_dict.values()])