如果我們交換字串 x 中的兩個不同位置的字母,使得它和字串 y 相等,那麼稱 x 和 y 兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。
例如,「tars」 和 「rats」 是相似的 (交換 0 與 2 的位置); 「rats」 和 「arts」 也是相似的,但是 「star」 不與 「tars」,「rats」,或 「arts」 相似。
總之,它們通過相似性形成了兩個關聯組: 和 。注意,「tars」 和 「arts」 是在同一組中,即使它們並不相似。形式上,對每個組而言,要確定乙個單詞在組中,只需要這個詞和該組中至少乙個單詞相似。
我們給出了乙個不包含重複的字串列表 a。列表中的每個字串都是 a 中其它所有字串的乙個字母異位詞。請問 a 中有多少個相似字串組?
輸入:["tars","rats","arts","star"]
輸出:2
a.length <= 2000
a[i].length <= 1000
a.length * a[i].length <=20000
a 中的所有單詞都只包含小寫字母。
a 中的所有單詞都具有相同的長度,且是彼此的字母異位詞。
此問題的判斷限制時間已經延長。
備註:
並查集根據題目可知給定字串陣列中的字串是其他字串的字母異位詞。因為,我們判斷兩個字串是否相似只需要判斷其不一樣字元個數是否為0或2。我們將相似的兩個字串放到乙個集合中,最終的答案便是這樣的集合的個數。
詳細過程見**
class
ufint
find
(int x)
return x;
}bool
issimilar
(int i,
int j)
void
union
(int x,
int y)
intgetnum()
}return cnt;}}
;class
solution
return cnt <=2;
}int
numsimilargroups
(vector
& a)}}
return uf.
getnum()
;}};
LeetCode 839 相似字串組
如果我們交換字串 x 中的兩個不同位置的字母,使得它和字串 y 相等,那麼稱 x 和 y 兩個字串相似。例如,tars 和 rats 是相似的 交換 0 與 2 的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts 相似。總之,它們通過相似性形成了兩個關...
leetCode 839 相似字串組
由題目可知,只要兩個字串相似則它們屬於同乙個連通分量,可以通過並查集維護連通分量的個數,最後返回。class solution return uf.getcount class unionfind public intfind int x return x public boolean union ...
leetcode 839 相似字串組
題意為 找到能交換兩個字元或者相同的就在一組,如果一堆中只有乙個符合這樣的條件就在這個堆中,即ab滿足條件 bc滿足條件那麼abc就在一堆中。並查集,先查詢 再合併到乙個堆中。這裡學習到乙個點就是標記的時候都可以用數字標記,只要符合條件即可,用什麼標記都行。還有題目中給出的是字母異位詞,即只是字母順...