版权声明:有一些内容粘贴之后变成图片如果需要原文原视频 可以联系我 https://blog.csdn.net/wodemale/article/details/89710463
给定一个字符串序列,拼接之后字典序最小。
解法:自定义比较器,调用Arrays.sort()来排序之后拼接返回
public class LowestLexicography {
public static class MyComparator implements Comparator<String> {
//贪心考虑a+b是否大于b+a
@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;
}
类似题目(剑指offer):
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
public class Solution {
public String PrintMinNumber(int [] numbers) {
String str = " ";
for (int i=0; i<numbers.length; i++){
for (int j=i+1; j<numbers.length; j++){
// Integer.valueOf()的作用是字符串转成int
int a = Integer.valueOf(numbers[i] + "" + numbers[j]);
// 两个字符串不是简单的加法,而是字符串拼接
int b = Integer.valueOf(numbers[j] + "" + numbers[i]);//精华所在
if (a > b) {// 按位比较,小的放在最前面
int t = numbers[i];
numbers[i] = numbers[j];
numbers[j] = t;
}
}
}
for (int i = 0; i < numbers.length; i++) {
// String.valueOf()的作用是int转字符串
str += String.valueOf(numbers[i]);// 此操作还是字符串拼接
}
return str;
}
}