力扣-1790.仅执行一次字符串交换能否使两个字符串相等
本文最后更新于:2022年10月13日 晚上
题目描述
思路及实现
首先考虑到特殊情况,如果两个字符串相等,那么直接返回True即可。
如果不相等,题目所给条件是仅交换一次,顺着这一点我们可以想到,找到需要进行交换的两个位置,如果交换后不相等,返回True即可。
在我的代码中使用了变量cnt
来寻找字符串中出现不匹配字符的次数,并且用了一个scout
来保存第一次找到的不匹配的位置。如果cnt > 1
说明有两个地方不匹配了,此时将当前位置与scout
位置的元素进行交换,再比较字符串即可知道一次交换是否相等。
1 |
|
其实可以使用两个变量和一组if...elif
保存两个位置,else
情况则是多于两个位置的字符不同,这种情况一次交换肯定无法导致两个字符串相同,返回False
即可。
而且这样最后也不需要拼接字符串,只需要判断两个字符串两个位置(s1[i]
对s2[j]
,s1[j]
对s2[i]
)的字符是否相同。
希望本文章能够帮到您~
力扣-1790.仅执行一次字符串交换能否使两个字符串相等
https://map1e-g.github.io/2022/10/11/leetcode-1790/