親密字符串

親密字符串

給定兩個由小寫字母構成的字符串 A 和 B ,
只要我們可以通過交換 A 中的兩個字母得到與 B 相等的結果,就返回 true ;否則返回 false 。

示例 1:

輸入: A = "ab", B = "ba"
輸出: true
示例 2:

輸入: A = "ab", B = "ab"
輸出: false
示例 3:

輸入: A = "aa", B = "aa"
輸出: true
示例 4:

輸入: A = "aaaaaaabc", B = "aaaaaaacb"
輸出: true
示例 5:

輸入: A = "", B = "aa"
輸出: false

提示:

0 <= A.length <= 20000
0 <= B.length <= 20000
A 和 B 僅由小寫字母構成。

class Solution(object):
    def buddyStrings(self, A, B):
        if (not A and not B) or len(A) != len(B):
            return False
        if A == B:
            s = set()
            for i in A:
                if i in s:
                    return True
                s.add(i)
            return False
        else:
            res = []
            for a,b in zip(A, B):
                print(a,b)
                if a != b:
                    res.append([a,b])

                if len(res) > 2:
                    return False
                print(res)
            return len(res) == 2 and res[0] == res[1][::-1]

s = Solution()
bs = s.buddyStrings("cdab","cdba")
print(bs)

想法盲點: A = "aba" B = "aba"

解題思路:

A和B均為空,返回False
len(A) != len(B),返回False
len(A) = len(B)且A=B,只要A中任意一個字符出現出現兩次,那么就可以通過交換
        這兩個相同的字符得到B,所以返回True。否則,返回False
len(A) = len(B) 且 A != B,縱向對比A和B每個位置上的字符,記錄不相同的字符對,
        如果字符對數量大于2,返回False;如果字符串對數量為2,且第一對的逆序就
        是第二對,那么通過交換這兩個字符就可以從A得到B,所以返回True。
自然而然
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容