字符串拼接最小字典

来源:互联网 发布:提高成绩的软件 编辑:程序博客网 时间:2024/06/05 06:26

给定一个字符串数组,找到一种拼接顺序,使得所有小字符串拼接成的大字符串在所有可能的拼接中字典序最小。

例如:给定strArr = {"bac", "bd"},n = 2。则有两种拼接顺序bacbd和bdbac,显然第一种拼接的字典序要小于第二种。


我们是否可以这样认为:如果str1的字典序小于str2的字典序,那么str1一定就放在前面,也就是str1+str2的字典序一定小于str2+str1的字典序呢?

看下面一个例子。

strArr = {"b", "ba"},如果按照上面的说法就应该是b的字典序小于ba的字典序,那么拼接后较小的字典序应该是bba。显然不正确,另一种拼接顺序bab的字典序是比bba要小的。

所以,不能单纯的按照单个字符串的字典序小就把它排在前面的思想。而是应该看二者之和的字典序的大小,也就是:

如果str1+str2  <  str2 + str1,则将str1放在前面,否则将str2放在前面。


code:

string maxDictionarySort(vector<string> vec, int n){sort(vec.begin(), vec.end(), cmp);string result = "";for(int i = 0; i < n; ++i)result += vec[i];return result;}//给字符串的排序规则static bool cmp(string s1, string s2){return (s1 + s2) <= (s2 + s1) ? true : false;}