力扣-1790.仅执行一次字符串交换能否使两个字符串相等

本文最后更新于:2022年10月13日 晚上

题目描述

第一张图

思路及实现

首先考虑到特殊情况,如果两个字符串相等,那么直接返回True即可。
如果不相等,题目所给条件是仅交换一次,顺着这一点我们可以想到,找到需要进行交换的两个位置,如果交换后不相等,返回True即可。
在我的代码中使用了变量cnt来寻找字符串中出现不匹配字符的次数,并且用了一个scout来保存第一次找到的不匹配的位置。如果cnt > 1说明有两个地方不匹配了,此时将当前位置与scout位置的元素进行交换,再比较字符串即可知道一次交换是否相等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution:
def areAlmostEqual(self, s1: str, s2: str) -> bool:
if s1 == s2:
return True
else:
cnt = 0
for i in range(len(s1)):
if s1[i] != s2[i]:
cnt += 1
if cnt > 1:
s: str = s2[0: scout] + s2[i] + s2[scout + 1: i] + s2[scout] + s2[i + 1:]
if s1 == s:
return True
else:
return False
scout = i
return False

其实可以使用两个变量和一组if...elif保存两个位置,else情况则是多于两个位置的字符不同,这种情况一次交换肯定无法导致两个字符串相同,返回False即可。
而且这样最后也不需要拼接字符串,只需要判断两个字符串两个位置(s1[i]s2[j]s1[j]s2[i])的字符是否相同。


这里有一只爱丽丝

希望本文章能够帮到您~


力扣-1790.仅执行一次字符串交换能否使两个字符串相等
https://map1e-g.github.io/2022/10/11/leetcode-1790/
作者
MaP1e-G
发布于
2022年10月11日
许可协议