import java.util.*;
public class Solution {
// 方法一: 自定义一个比较器(最简单的方法)
public class ComparaString implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
String str12 = str1 + str2;
String str21 = str2 + str1;
for (int i = 0; i < str12.length(); i++) {
if (str12.charAt(i) < str21.charAt(i)) {
return -1;
}
else if (str12.charAt(i) > str21.charAt(i)) {
return 1;
}
}
return 0;
}
}
/**
*
* @param strs string字符串一维数组 the strings
* @return string字符串
*/
public String minString (String[] strs) {
// write code here
// 一些特殊情况的处理
if (1 == strs.length) {
return strs[0];
}
// 方法一
// Arrays.sort(strs, new ComparaString());
// 方法二
quickSort(strs, 0, strs.length - 1);
// 定义一个 StringBuffer,用于存放最终的返回结果(因为 StringBuffer 的拼接效率比 String 的拼接效率高得多,所以这里我们使用 StringBuffer 对数组内的字符串进行拼接)
StringBuffer res = new StringBuffer("");
for (String str : strs) {
res.append(str);
}
return new String(res);
}
// 方法二: 自己实现一遍快速排序算法(推荐)
// 快排
public void quickSort(String[] strs, int start, int end) {
if (start >= end) {
return;
}
// 荷兰国旗问题
int l = start - 1; // 小于区域
int r = end + 1; // 大于区域
int cur = start; // 当前位置
String tmp = strs[end]; // 比较的字符串
while (cur < r) {
if (comparaString(strs[cur], tmp) == -1) { // 小于
String swap = strs[cur];
strs[cur] = strs[l + 1];
strs[l + 1] = swap;
l++;
cur++;
}
else if (comparaString(strs[cur], tmp) == 1) { // 大于
String swap = strs[cur];
strs[cur] = strs[r - 1];
strs[r - 1] = swap;
r--;
}
else { // 等于
cur++;
}
}
// 递归调用
quickSort(strs, start, l);
quickSort(strs, r, end);
return;
}
// 自定义一个函数,实现两个字符串的大小比较
public int comparaString(String str1, String str2) {
String str12 = str1 + str2;
String str21 = str2 + str1;
for (int i = 0; i < str12.length(); i++) {
if (str12.charAt(i) < str21.charAt(i)) {
return -1;
}
else if (str12.charAt(i) > str21.charAt(i)) {
return 1;
}
}
return 0;
}
}