使到用贪心策略以及比较器。
使用贪心策略,一定不要去抠贪心策略的正确性,证明很麻烦。
对于字符串str1以及str2,在进行比较时需要比较str1+str2以及str2+str1谁大谁小,而不应该直接比较str1和str2谁大谁小。比如“ba”和"b"。如果直接比较的话得到的结果是“bba”,而最终的答案应该是“bab”。
package algorithm.section7;
import java.util.Arrays;
import java.util.Comparator;
public class LowestLexicography {
public static class myComparator implements Comparator<String>{
@Override
public int compare(String s1, String s2) {
return (s1 + s2).compareTo(s2 + s1);
}
}
public static String lowestString(String[] strings){
if (strings.length == 0) return null;
if (strings.length == 1) return strings[0];
Arrays.sort(strings, new myComparator());
String res = "";
for (int i = 0; i < strings.length; i++) res += strings[i];
return res;
}
public static void main(String[] args) {
String[] strs1 = { "jibw", "ji", "jp", "bw", "jibw" };
System.out.println(lowestString(strs1));
String[] strs2 = { "b", "ba" };
System.out.println(lowestString(strs2));
}
}