首页 > 试题广场 >

拼接所有的字符串产生字典序最小的字符串

[编程题]拼接所有的字符串产生字典序最小的字符串
  • 热度指数:2735 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个字符串的数组strs,请找到一种拼接顺序,使得所有的字符串拼接起来组成的字符串是所有可能性中字典序最小的,并返回这个字符串。

输入描述:
输入包含多行,第一行包含一个整数n,代表字符串数组strs的长度,后面n行,每行一个字符串,代表strs[i](保证所有字符串长度都小于10)。


输出描述:
输出一行,包含一个字符串,代表返回的字典序最小的字符串。
示例1

输入

2
abc
de

输出

abcde
示例2

输入

2
b
ba

输出

bab

备注:
时间复杂度,额外空间复杂度
贪心算法,对字符串数组进行排序,如果某两个字符串a和b满足“a+b < b+a”,就将a排在b的前面,排序完后将字符串数组中的所有字符串连接起来就是要求的字典序最小的字符串。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] strs = new String[n];
        for(int i = 0; i < n; i++) strs[i] = br.readLine();
        Arrays.sort(strs, new Comparator<String>(){
            @Override
            public int compare(String s1, String s2) {
                return (s1 + s2).compareTo(s2 + s1);
            }
        });
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < n; i++) sb.append(strs[i]);
        System.out.println(sb.toString());
    }
}

发表于 2021-11-19 22:47:54 回复(0)

问题信息

上传者:小小
难度:
2条回答 8665浏览

热门推荐

通过挑战的用户

查看代码