題目描述

找出一個字串中長度為k的子字串,並將他們依照編列辭典的方式進行排序。



辭典使用字母順序來排序,像是「ball」會在「cat」前,而「dog」會在「dorm」前。大寫字幕會在小寫字母的前面,如「Happy」在「happy」前,「Zoo」在「ball」前。

原題網址

輸入格式

第一行包含一個由英文字母組成的字串,最長會有1000的字元。

第二行則為子字串的長度k。

輸出格式

第一行輸出字典排序後最前面的字串,第二行輸出字典排序後最後面的字串。

範例輸入

welcometojava
3

範例輸出

ava
wel

額外解釋

以下是長度為3的子字串:

wel
elc
lco
com
ome
met
eto
toj
oja
jav
ava

其中的「ava」在辭典的位置中是最前面的,「wel」是最後面的。

解題概念

這裡可以直接使用Java的集合(Collection)API所提供的排序(sort)功能來完成字典排序。找出所有子字串後存入集合物件內,再對集合使用「sort」方法。接著只要在第一行輸出集合的第一個元素,第二行輸出集合的最後一個元素即可。

參考答案

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Solution {

    public static void main(final String[] args) {
        final Scanner sc = new Scanner(System.in);
        final String s = sc.next();
        final int k = sc.nextInt();

        final int length = s.length();
        final ArrayList<String> substringList = new ArrayList<>();
        for (int i = k; i <= length; ++i) {
            substringList.add(s.substring(i - k, i));
        }
        Collections.sort(substringList);
        System.out.println(substringList.get(0));
        System.out.println(substringList.get(length - k));
    }
}