原題鏈結
思路分析:
觀察題面後發現兩個字串相似與否的條件只有兩個:
兩個字串本身就是相等的,例如 「abc
abcab
c」 與 「abc
abcab
c」 相似。
兩個字串在經過一次交換後相等(只可以交換一次,且只能交換兩個元素),例如 「abc
abcab
c」 與 「acb
acbac
b」 相似,但 「abc
abcab
c」 與 「cab
cabca
b」 卻不相似。
末尾備註中提示了所有字串均為字母異或詞,所以不存在字串a
aa 有的元素,字串b
bb卻沒有的情況。
綜上所述,我們判斷兩個字串是否相似,只需要判斷對應位置的元素不同的個數是否小於等於 2
22 即可。
將所有字串抽象為圖中的節點,題目中詢問的其實就是圖中聯通分量的個數,所以採用並查集維護。
c od
e:
code:
code
:
class
unionfind
}int
find
(int x)
bool
same
(int x,
int y)
void
unite
(int x,
int y)};
bool
solve
(string& a,string& b)
}return cnt <=2;
}class
solution}}
return t.count;}}
;
力扣 839 相似字串組 並查集
思路 仔細審題,關鍵是字母異位詞,這就說明所有字串的長度一樣,且含有的字母都相同,那麼就可以比較簡單的判斷兩個字串是否是相似的,直接遍歷第乙個字串,統計同一位置但字元不相等的位置總數,若其等於0或2則相似,時間複雜度為o s trle n o strlen o strl en 那麼暴力比較字串並用並...
leetcode 839 相似字串組(並查集)
如果交換字串 x 中的兩個不同位置的字母,使得它和字串 y 相等,那麼稱 x 和 y 兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換 0 與 2 的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 art...
並查集 思維 X Plosives
一 問題描述 題目鏈結 有n種化合物,每種化合物由兩種元素組成。當幾種的化合物數量等於他們所含不同元素的數量時,就會發生 現在依次給出化合物的組成,當新的化合物與之前的化合物放在一起會發生 時,就不能允許這個化合物放進來。輸出拒絕的次數。二 問題分析 把元素看成點,化合物看成邊,每次新的化合物進來當...