2012-02-09 92 views
0

我還沒有使用排序和alogorithms很多,並確定與向量。最近我遇到了一個有趣的問題,希望你的建議以及如何解決它。所以,下面是我的問題。字符串矢量排序

Q,我已經在向量中給出了4個字符串,並且必須根據這些字符的特定順序來排列這些字符串。所以,任何字符串的最後一個字符應該與任何其他字符串的第一個字符相匹配,並且該字符串的最後一個字符應該與任何其他字符串的第一個字符相匹配,這樣我必須創建一個最長的字符串。

例如,如果我有像「ABCD」「TGHI」「DADC」「IYUR」「CXYT」 這樣的字符串向量,所以它會像「ABCD」那樣排列,那麼會出現第三個字符串「DADC」將是第五個字符串「CXYT」等 因此,結果將是「ABCD」「DADC」「CXYT」「TGHI」「IYUR」。

現在,我想知道是否是一個好主意,檢查每個字符串與其他字符串,如果它是'兼容'根據上述規則..所以如果我有5個字符串中的向量那麼我會有5 + 4 + 3 + 2 + 1 possiblelties,如果例如我有20個字符串,那麼它會增加很多,所以這是一個好主意,或者是否有任何其他高效的解決方案... 非常感謝和希望) 你明白。

+4

請不要說「例如」,永遠。只有[alot](http://hyperboleandahalf.blogspot.com/2010/04/alot-is-better-than-you-at-everything.html)可以這樣說。 – 2012-02-09 19:37:39

+1

「排序」不是正確的術語,因爲您的元素沒有線性順序。這是更復雜的事情。 – 2012-02-09 19:40:11

+0

看起來像「最長路徑問題」,不幸的是NP完全。 – zch 2012-02-09 19:51:40

回答

0

更好的方法可能是使用字符串構建有向圖。如果s1的最後一個字符與s2的第一個字符相同,則字符串s1的字符串將會出現字符串s2。然後,您可以嘗試查找圖中最長的路徑。

1

想象每一個字母都是圖中的一個節點。每個單詞表示兩個字母之間的有向通路。「ACCA」定義A→A「BAAC」B→C。在這個圖表中,你想找到一個歐拉路徑。 http://en.wikipedia.org/wiki/Eulerian_path。歐拉路徑被定義爲一條路徑,每條邊只有一次訪問,並且每條邊代表一個詞,這意味着您已經使用了所有的詞語!