題目連結(jié):
題目意譯:
你被給定兩字串 s1 和 s2,兩者長(zhǎng)度相等。一次的字串交換為一種操作,其中你可以選擇一個(gè)字串中兩個(gè)索引值(不一定相異)並將位於這兩個(gè)索引值的字元交換。
如果在只對(duì)恰好其中一個(gè)字串做最多一次的字串交換的情況下可以使兩字串相同,則回傳真(True);反之,回傳假(False)。
限制:
1 ≦ s1.length, s2.length ≦ 100
s1.length == s2.length
s1 和 s2 只由小寫英文字母組成。
範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: s1 = "bank", s2 = "kanb"
輸出: true
解釋: 例如,將 s2 第一個(gè)和最後一個(gè)字元交換便可以得到 "bank"。
範(fàn)例 2:
輸入: s1 = "attack", s2 = "defend"
輸出: false
解釋: 不可能只經(jīng)由一次字串交換就使它們變?yōu)橄嗤?/div>
範(fàn)例 3:
輸入: s1 = "kelb", s2 = "kelb"
輸出: true
解釋: 兩個(gè)字串已經(jīng)一樣了,因此不需任何的字串交換。
解題思維:
同時(shí)掃過兩個(gè)字串並比較同位置的字元。可以看到如果:
不同處是 0 個(gè),則不需做任何的字串交換,因此回傳真;
不同處是 1 個(gè),則表示不論做幾次字串交換都會(huì)有一處不同,因此回傳假;
不同處大於 2 個(gè),則代表一次字串交換不夠用(一次最多消掉兩個(gè)),因此回傳假;
最後不同處是恰好 2 個(gè),則就是隨便挑一個(gè)字串(例如 s1)交換這兩處的字元然後再與另一個(gè)字串(承前例,s2)比較,如果一樣就回傳真;不一樣就回傳假。
此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。