拼接最小字典序

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


拼接最小字典序

拼接最小字典序练习

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

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

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

测试样例:

["abc","de"],2
"abcde"

Java (javac 1.7)

代码自动补全

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

}

您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

运行

时间: 2024-10-13 12:24:52

拼接最小字典序的相关文章

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

拼接最小字典序: 给定一个字符串类型的数组strs,请找到一种拼接顺序,使得将所有字符串拼接起来组成的大字符串是所有可能性中字典顺序最小的并放回这个大字符串. 思路: 1.字典序,12345这五个数,按不同的顺序排列,所有的排列中最前面的是12345,最后面的是 54321. 2.使用比较函数usort(arr,'costomcomp'),自定义比较大小的函数,costomcomp(a,b) return a+b > b+a 3.str_split 单个字符串转数组 4.字符转ascii ord

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

对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的. 给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串. 测试样例: ["abc","de"],2 "abcde" public class Prior { public String findSmallest(String[] strs, int n) { // write code here Arrays.sort(strs,

python编程题-拼接最小字典序

题目来源:牛客网 对于一个给定的字符串数组,请找到一种拼接顺序,使所有小字符串拼接成的大字符串是所有可能的拼接中字典序最小的. 给定一个字符串数组strs,同时给定它的大小,请返回拼接成的串. 测试样例: ["abc","de"],2 "abcde" python 代码 # -*- coding:utf-8 -*- class Prior:     def findSmallest(self, strs, n):         # write 

随手练——拼接最小字典序

没有找到OJ题目. 第一眼想到的一般都是按字典序从头到尾依次. b,ba按这个思想排出来,是bba,但其实最小的是bab,就要改一下比较策略了,改成拼接之后,比较谁小. int cmp(string s1,string s2) { return s1 + s2 < s2 + s1 ? 1 : 0; } 完成代码: #include <iostream> #include <string> #include <algorithm> #include <vect

UVa 1584 Circular Sequence(环形串最小字典序)

题意  给你一个环形串   输出它以某一位为起点顺时针得到串的最小字典序 直接模拟   每次后移一位比较字典序即可  注意不能用strcpy(s+1,s)这样后移  strcpy复制地址不能有重叠部分 #include<cstdio> #include<cstring> using namespace std; const int N = 150; char s[N], ans[N], c; int t, l; int main() { scanf ("%d",

poj 2337 欧拉回路按照最小字典序输出+注意为了按最小字典序怎么处理邻接表

http://poj.org/problem?id=2337 WA了好久,昨晚1点多睡不着写的,狂WA,当时是因为用邻接矩阵存储,比如aba,aa只能存下一个,这个之前还没遇到过,今天才注意到--邻接矩阵无法存储平行边, 关于欧拉回路判断看我另几篇日志或者看我的欧拉总结 再贴个输出欧拉回路的模板 其中,参数u是起点,注意如果是输出欧拉路径的话,u必须是出度比入度大一的那个点,如果输出欧拉回路,随便按要求找个就行 void euler(int u) { for(int i=head[u];i!=-

3532: [Sdoi2014]Lis 最小字典序最小割

3532: [Sdoi2014]Lis Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 865  Solved: 311[Submit][Status][Discuss] Description 给定序列A,序列中的每一项Ai有删除代价Bi和附加属性Ci.请删除若干项,使得4的最长上升子序列长度减少至少1,且付出的代价之和最小,并输出方案.如果有多种方案,请输出将删去项的附加属性排序之后,字典序最小的一种. 这题难点在如何求一组最小字典序最小的最小

POJ 题目 3693 Maximum repetition substring(后缀数组+RMQ+枚举求最小字典序的重复次数最多的子串)

Maximum repetition substring Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8067   Accepted: 2463 Description The repetition number of a string is defined as the maximum number R such that the string can be partitioned into R same conse

HDU - 5324:Boring Class (CDQ分治&amp;树状数组&amp;最小字典序)

题意:给定N个组合,每个组合有a和b,现在求最长序列,满足a不升,b不降. 思路:三位偏序,CDQ分治.   但是没想到怎么输出最小字典序,我好菜啊. 最小字典序: 我们倒序CDQ分治,ans[i]表示倒序的以i为结尾的最长序列,如果当前的ans[i]==目前最大,而且满足序列要求,就输出. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; const int max