算法

字符串最低字典序拼接

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));

    }
上一篇下一篇

猜你喜欢

热点阅读