算法编程题6-字符串拼接找到字典序最小组合问题

来源:互联网 发布:重庆oppo公司知乎 编辑:程序博客网 时间:2024/06/06 11:37

给定一个字符串类型的数组strs。找到一种拼接顺序,使得将所有字符串拼接起来组成的大字符串是所有可能性中字典序最小的,并返回这个大字符串。

举例:

strs=["abc","de"]。可以拼成"abcde",也可以拼成"deabc",但前者字典顺序更小,所以返回“abcde”

strs=["b","ba"]. 可以拼成“bba”和“bab”,后者字典序小,返回后者“bab”


如果字符串数组长度为n,则这道题的最优解的时间复杂度O(N*logN).实质是一种排序的实现,排序的结果就是拼接的顺序


实例代码:

static bool cmp(const string& str1, const string& str2)  //注意,重点在这,两字符串的比较方式{return str1 + str2 < str2 + str1 ? true : false;}string findSmallest(vector<string> strs, int n) {// write code herestring str = "";sort(strs.begin(), strs.end(), cmp);for (int i = 0; i < strs.size(); ++i)str += strs[i];return str;}