字典序
什么是字典序?
举个例子
给定一个字符串数组strs={“ba”,“b”},可以将这些字符串进行任意顺序的拼接,然而得到的所有情况中只有一种是字典序最小的字符串拼接顺序。
拿到这种题目首先想到的是可以将所有的strs按照字典序排序,然后将串起来的结果返回,但是这种方式是错误的,按照这种思路得到上述例子的结果是bba,而正确答案是bab。因此这里提供了另外一种思路。假如要比较两个字符串,可以比较将两个字符串起来之后比较其字典序,得到较小的字典序排序,将最后的结果全部串起来就是最终答案。
代码实现
public class MyComparator implements Comparator<String> {
//自定义一个比较器,对两个字符串串起来比较其字典序
@Override
public int compare(String o1, String o2) {
return (o1+o2).compareTo(o2+o1);
}
public static String lowestString (String []strs){
if(strs == null ||strs.length == 0){
return "";
}
//将strs放入自定义的比较器中比较并排序
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 []strs = {"b","ba","abc"};
System.out.println(lowestString(strs));
}
}
输出结果