题目大意:
给定字符串类型数组strs,找出一种拼接顺序来拼接str中的字符串,使得最终生成的大字符串字典序最小,并返回该大字符串。
如"ba”、“b”可以拼接为“bba”和“bab”,两者相比“bab”字典序更小,因此返回“bab”
题目思路:
这道题目实质上是一种排序问题。
以下是备选的几种方案:
1、给出所有可能的拼接方式,遍历求最小。太暴力了 ...不约不约,时间复杂度为O(N^2)
2、求出单个字符串的字典序,按照字典序从小到大的顺序排序
事实证明这个方案是错误的,如"ba" 和“b”按单个字符串的字典序排序结果为“bba”,并不是字典序最小的字符串
3、对于两个字符串str1、str2,如果str1+str2 < str2 + str1,str1就要放到str2的前面。
实现方案三:
class Prior {
public:
static bool cmp(string s1,string s2){
return (s1+s2<s2+s1);
}
string findSmallest(vector<string> strs, int n) {
sort(strs.begin(),strs.end(),cmp);
// write code here
string s;