切換
舊版
前往
大廳
主題

ZeroJudge - b839: 104北二3.朋友 解題心得

Not In My Back Yard | 2019-09-04 22:26:43 | 巴幣 0 | 人氣 230

題目連結:


題目大意:
定義兩字串 S 、 T 的「相似」為:
S、T 的 LCS 之長度不小於 min( |S|, |T| ) ÷ 2.0

現在輸入的第一列給定一正整數 T (1 ≦ T ≦ 3),代表有 T 組的測試資料。每組測試資料的第一列給定一正整數 N (1 ≦ N ≦ 50),代表有 N 個字串。接著的 N 列輸入,代表這 N 個字串的內容(長度不超過 50 個字元,且皆由小寫字母組成)

根據字串相似的定義,可以將這 N 個字串分作好幾個團體。任意一組來自兩個團體的不同字串彼此不相似。求當中最大的團體,其包含的字串之數量為何?



範例輸入:
3
5
abc
adb
xyzzzz
zzzxop
xompn
5
abc
adb
xyzzzz
zzzxop
xoapd
5
abc
adb
xyzzzz
zzzxop
xoape


範例輸出:
3
5
3


解題思維:
首先,對於每對可能的字串對,作一次它們的最長共同子序列(Longest Common Subsequences,即 LCS。作法可見以前的文章)。

判斷是否符合相似的定義。若符合,則將此對字串以併查集(Union-Find Set ,以前的文章有介紹過專門的練習題)串接起來。將兩者所屬的集合並在一起,形成一個新的團體。

最後看哪個字串在並查集的結構中的「rank」最大(表示以這個字串為根的樹之大小,在本題即團體的大小),即是所求。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作