ETH官方钱包

前往
大廳
主題

LeetCode - 893. Groups of Special-Equivalent Strings 解題心得

Not In My Back Yard | 2021-02-07 00:00:09 | 巴幣 0 | 人氣 194

題目連結(jié):


題目意譯:
給定你一個(gè)字串陣列 A 。

一個(gè)操作作用於 S 上,其由交換任意兩個(gè) S 中是偶數(shù)索引值的字母或是任意兩個(gè) S 中是奇數(shù)索引值之字母。

兩個(gè)字串 S 和 T 為特殊等價(jià),如果存在任意步數(shù)的操作於 S 上,使得 S 等於 T。

例如, S = "zzxy" 及 T = "xyzz" 為特殊等價(jià)因?yàn)槲覀兛梢宰鞒霾僮?"zzxy" -> "xzzy" -> "xyzz" ,其為交換 S[0] 和 S[2] 然後交換 S[1] 和 S[3]。

現(xiàn)在定義一個(gè) A 裡的特殊等價(jià)之群組為 A 的一個(gè)非空子集合,其滿足:
該群組裡的每個(gè)字串兩兩為特殊等價(jià)、
群組大小盡可能地大(即不存在一個(gè)字串 S ,其不在群組裡但卻與該群組的每個(gè)字串特殊等價(jià))


回傳 A 的特殊等價(jià)群組之?dāng)?shù)量。

注:
1 ≦ A.length ≦ 1000
1 ≦ A[i].length ≦ 20
所有 A[i] 的長(zhǎng)度一樣。
所有 A[i] 只由小寫(xiě)字母組成。



範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: ["abcd","cdab","cbad","xyzz","zzxy","zzyx"]
輸出: 3
解釋:
其中一個(gè)群組為 ["abcd", "cdab", "cbad"],因?yàn)樗鼈冎g兩兩都是特殊等價(jià),且沒(méi)有其他的字串與它們兩兩特殊等價(jià)。其他兩個(gè)群組為 ["xyzz", "zzxy"] 和 ["zzyx"] 。值得注意的是, "zzxy" 與 "zzyx" 並非特殊等價(jià)。

範(fàn)例 2:
輸入: ["abc","acb","bac","bca","cab","cba"]
輸出: 3


解題思維:
用類(lèi)似這題的做法,將 S 的每個(gè)字串都先變?yōu)樽钚”硎痉ǎ∕inimum Representation)——當(dāng)然,只能使用題目定義的操作。所以可以將每個(gè)字串奇數(shù)、偶數(shù)索引值的字母分開(kāi),排序後再重組回去。

接著利用雜湊表(Hash Table)統(tǒng)計(jì) S 裡有多少不同的最小表示法,而每種最小表示法即代表著一個(gè)群組,因此種類(lèi)個(gè)數(shù)即是所求。




此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說(shuō)明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。
追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

更多創(chuàng)作