算法--拼接最小字典序

转载请标明出处http://www.cnblogs.com/haozhengfei/p/63b2460bceae42e55f0c2d150bde663b.html 


拼接最小字典序

 
拼接最小字典序练习
 

第8节 拼接最小字典序练习题

 

对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的。

给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串。

测试样例:
["abc","de"],2
"abcde"
 
 
1
import java.util.*;
2

3
public class Prior {
4
    public String findSmallest(String[] strs, int n) {
5
        // 这里使用插入排序
6
        for (int i = 1; i < strs.length; i++) {
7
            // 当前需要排序的元素
8
            String target = strs[i];
9
            // j标记当前位置
10
            int j = i;
11
            while(j>0 && (target+strs[j-1]).compareTo(strs[j-1]+target) < 0){
12
                strs[j] = strs[j-1];
13
                j--;
14
            }
15
            strs[j] = target;
16
        }
17
        StringBuffer sb = new StringBuffer();
18
        for(String str: strs){
19
            sb.append(str);
20
        }
21
        return sb.toString();
22
    }
23
    //方法二,使用Arrays.sort()方法
24
    public String findSmallest2(String[] strs, int n) {
25
        if(strs == null){
26
            return null;
27
        }
28

29
        Comparator<String> c = new Comparator<String>() {
30
            @Override
31
            public int compare(String str1, String str2) {
32
                String str1first = str1 + str2;
33
                String str2first = str2 + str1;
34

35
                return str1first.compareTo(str2first);
36
            }
37
        };
38

39
        Arrays.sort(strs, c);
40

41
        StringBuffer str = new StringBuffer();
42
        for(int i = 0; i < n; i++){
43
            str.append(strs[i]);
44
        }
45

46
        return str.toString();
47
    }
48
}
 
 
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
 
 

 
原文地址:https://www.cnblogs.com/haozhengfei/p/63b2460bceae42e55f0c2d150bde663b.html