題目描述
找出一個字串中長度為k的子字串,並將他們依照編列辭典的方式進行排序。
辭典使用字母順序來排序,像是「ball」會在「cat」前,而「dog」會在「dorm」前。大寫字幕會在小寫字母的前面,如「Happy」在「happy」前,「Zoo」在「ball」前。
原題網址
輸入格式
第一行包含一個由英文字母組成的字串,最長會有1000的字元。
第二行則為子字串的長度k。
輸出格式
第一行輸出字典排序後最前面的字串,第二行輸出字典排序後最後面的字串。
範例輸入
welcometojava
3
3
範例輸出
ava
wel
wel
額外解釋
以下是長度為3的子字串:
wel
elc
lco
com
ome
met
eto
toj
oja
jav
ava
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));
}
}