839. 相似字串組
如果交換字串x
中的兩個不同位置的字母,使得它和字串y
相等,那麼稱x
和y
兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。
例如,"tars"
和"rats"
是相似的 (交換0
與2
的位置);"rats"
和"arts"
也是相似的,但是"star"
不與"tars"
,"rats"
,或"arts"
相似。
總之,它們通過相似性形成了兩個關聯組:和
。注意,
"tars"
和"arts"
是在同一組中,即使它們並不相似。形式上,對每個組而言,要確定乙個單詞在組中,只需要這個詞和該組中至少乙個單詞相似。
給你乙個字串列表strs
。列表中的每個字串都是strs
中其它所有字串的乙個字母異位詞。請問strs
中有多少個相似字串組?
示例 1:
輸入:strs = ["tars","rats","arts","star"]輸出:2示例 2:
輸入:strs = ["omv","ovm"]輸出:1
備註:
字母異位詞(anagram),一種把某個字串的字母的位置(順序)加以改換所形成的新詞。
思路:如果讀者有學習過海明碼的話,本題的題意就是碼距為0或2的字串為一組,問最後的組數;我們只需要計算碼距,使用並查集進行集合合併;
優化的方法:
1. 將字串按照長度的不同儲存在不用列表裡,只有長度相同的字串才有可能是相似的(因為儲存string很浪費空間和時間,因此我的**儲存的是索引)
2. 對於已經進行合併過的字串,如果當前字串和它相同,則直接可以知道當前字串要合併的集合
class solution
void union(int a, int b, int& sumpoint)
}bool comdist(string a, string b)
}return ans == 0 || ans == 2;
}int numsimilargroups(vector& strs)
}index[len].push_back(i);
}return ans;
}};
839 相似字串組
難度困難93 如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱x和y兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換0與2的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts 相似。...
839 相似字串組
如果交換字串 x 中的兩個不同位置的字母,使得它和字串 y 相等,那麼稱 x 和 y 兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換 0 與 2 的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 art...
839 相似字串組
如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱x和y兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換0與2的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts 相似。總之,它們通過...