839 相似字串組

2021-10-18 11:24:12 字數 1485 閱讀 1063

839. 相似字串組

如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱xy兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。

例如,"tars""rats"是相似的 (交換02的位置);"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 相似。總之,它們通過...