字符串最低字典序拼接
2018-01-17 本文已影响0人
一凡呀
题目:
image.png思路:
先解释何为字典序,借用百度百科
image.png
首先我们一般都会想到,一个数组,要把所有元素组合起来,字典序最小,那就把小的数字放前面大的放后面就行了,但是实际上这种想法是错误的,例如数组{b,ba},字典序b<ba,但是拼接起来bba>bab
所以我们又想到了一种思想就是把str1和str2拼接起来比较大小,即str1.str2>=str2.str1,那么就把str2放在前面,用的是贪心,具体证明看牛客网初级班第八章,数学思想的运用,
代码:
public static class MyComparator implements Comparator<String> {
@Override
public int compare(String a, String b) {
return (a + b).compareTo(b + a);
}
}
public static String lowestString(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
Arrays.sort(strs, new MyComparator());
String res = "";
for (int i = 0; i < strs.length; i++) {
res += strs[i];
}
return res;
}
public static void main(String[] args) {
String[] strs1 = { "jibw", "ji", "jp", "bw", "jibw" };
System.out.println(lowestString(strs1));
String[] strs2 = { "ba", "b" };
System.out.println(lowestString(strs2));
}