拼接最小字典序

Posted 日月的弯刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拼接最小字典序相关的知识,希望对你有一定的参考价值。

转载请标明出处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
}
 
 
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例
 
 

 

以上是关于拼接最小字典序的主要内容,如果未能解决你的问题,请参考以下文章

拼接最小字典序

[PHP]算法-拼接最小字典序的实现

字符串练习题:拼接最小字典序

[HDU2328]Corporate Identity(后缀数组)

1625. 执行操作后字典序最小的字符串

UVA 10441 - Catenyms(欧拉道路)