LeetCode简单题之仅执行一次字符串交换能否使两个字符串相等
題目
給你長度相等的兩個字符串 s1 和 s2 。一次 字符串交換 操作的步驟如下:選出某個字符串中的兩個下標(不必不同),并交換這兩個下標所對應的字符。
如果對 其中一個字符串 執行 最多一次字符串交換 就可以使兩個字符串相等,返回 true ;否則,返回 false 。
示例 1:
輸入:s1 = “bank”, s2 = “kanb”
輸出:true
解釋:例如,交換 s2 中的第一個和最后一個字符可以得到 “bank”
示例 2:
輸入:s1 = “attack”, s2 = “defend”
輸出:false
解釋:一次字符串交換無法使兩個字符串相等
示例 3:
輸入:s1 = “kelb”, s2 = “kelb”
輸出:true
解釋:兩個字符串已經相等,所以不需要進行字符串交換
示例 4:
輸入:s1 = “abcd”, s2 = “dcba”
輸出:false
提示:
1 <= s1.length, s2.length <= 100
s1.length == s2.length
s1 和 s2 僅由小寫英文字母組成
來源:力扣(LeetCode)
解題思路
??同時遍歷兩個字符串,標記不一樣的字符下標,如果不一樣的字符對超過了兩對那么題目一定不成立,如果不一樣的字符對只有一對也不會成立,如果沒有不一樣的字符,題目成立。如果恰恰只有兩對不一樣的字符對,那么判斷交換后是否一樣即可。
class Solution:def areAlmostEqual(self, s1: str, s2: str) -> bool:temp=[]for i in range(len(s1)):if s1[i]!=s2[i]:temp.append(i)if len(temp)==0: #如果沒有不一樣的字符return Trueelif len(temp)%2 or len(temp)>2: #如果僅有一對不同字符對或者超過兩對return Falsereturn True if s1[temp[0]]==s2[temp[1]] and s1[temp[1]]==s2[temp[0]] else False #判斷交換后是否一樣
總結
以上是生活随笔為你收集整理的LeetCode简单题之仅执行一次字符串交换能否使两个字符串相等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode简单题之判断国际象棋棋盘
- 下一篇: LeetCode简单题之二叉搜索树的最小