对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。
给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。
给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。
测试样例:
["abc","de"],2"abcde"
解析:可以将该题转换成字符串排序的问题,主要思路是将字符串数组某种规则进行由小到大排序,一次拼接排序后的字符串即可得到结果,那具体使用什么排序规则就需要认真考量了。
首先举一个错误方案:
那正确的方案是怎样的呢?
方案二:str1和str2按照如下方式进行排序:
若str1+str2>str2+str1,则将str1放在前面,否则str2放在前面。
该方案时间复杂度可以达到O(N*logN)
代码实现:(以下代码测试无误)
import java.util.*;
public class Prior {
public String findSmallest(String[] strs, int n) {
if (strs == null || n == 0) {
return "";
}
Arrays.sort(strs, new Comparator<String>(){
@Override
public int compare(String a, String b) {
return (a + b).compareTo(b + a);
}
});
String res = "";
for (int i = 0; i < n; i++) {
res += strs[i];
}
return res;
}
}