題目連結(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)各位大大撥冗討論。