字符串向量排序

时间:2012-02-09 19:28:18

标签: c++ sorting vector stl-algorithm

我没有使用排序和算法很多,并且很好用矢量。最近我面临一个有趣的问题,并希望你的建议如何解决它。所以,下面是我的问题。

问:我在向量中给了4个字符串,并且必须根据这些字符的顺序排列这些字符串。因此,任何字符串的最后一个字符应该与任何其他字符串的第一个字符匹配,并且该字符串的最后一个字符应该与任何其他字符串的第一个字符匹配,这样我就必须创建一个尽可能长的字符串。 / p>

例如,如果我有一个字符串向量,如“ABCD”“TGHI”“DADC”“IYUR”“CXYT” 所以它会像“ABCD”那样排列然后会有第三个字符串“DADC”然后会有第五个字符串“CXYT”等等 因此,结果将是“ABCD”“DADC”“CXYT”“TGHI”“IYUR”。

现在,我想知道根据上面的规则检查每个字符串是否与其他字符串是一个好主意如果它是'兼容的'那么如果我在向量中有5个字符串那么我将有5+ 4 + 3 + 2 + 1可能性,如果我有20个字符串那么它会增加很多,所以这是一个好主意还是有任何其他有效的解决方案... 非常感谢和希望(大多数)你理解。

2 个答案:

答案 0 :(得分:1)

想象一下每个字母作为图表中的节点。每个单词代表两个字母之间的定向路径。“ACCA”定义A-> A“BAAC”B - > C。在此图中,您希望找到一条欧拉路径。 http://en.wikipedia.org/wiki/Eulerian_path。欧拉路径被定义为一个路径,它只访问每个边缘一次,因为每条边代表一个单词,意味着你已经使用了所有单词!

答案 1 :(得分:0)

更好的方法可能是使用字符串构建有向图。如果s1的最后一个字符与s2的第一个字符相同,则会有字符串s1到字符串s2的边缘。然后,您可以尝试在图表中找到最长的路径。