题目描述:
对输入的单词进行字典序排序输出: 字典序定义:1. 单词中字母比较不区分大小写,两个单词先以第一个字母作为排序的基准,如果第一个字母相同,就用第二个字母为基准,如果第二个字母相同就以第三个字母为基准。依此类推,如果到某个字母不相同,字母顺序在前的那个单词顺序在前。 2. 当一个短单词和一个长单词的开头部分都相同(即短单词是长单词从首字母开始的一部分),短单词顺序在前。 3. 字母大小写不同的相同单词,只输出一次。
输入描述:
不超过255个字符中,单词间用空格进行分隔,为简单起见,单词不包含连字符,无其它标点符号。
输出描述:
输出排序后的单词,单词之间用空格隔开(最后不带空格),重复的单词只输出一次。
示例1
输入:
Hello hello world
输出:
Hello world
代码实现:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
//字典排序,采用插入排序的方法
public static List<String> sort(String string){
int length = string.length();
int k =0;
List sortedList = new ArrayList();
for(int i = 0;i<length;i++){
if((string.charAt(i)-" ") ==0){
String word = string.substring(k, i);
addAword(sortedList,word);
k=i+1;
}
}
String word = string.substring(k);
addAword(sortedList,word);
return sortedList;
}
//插入排序实现
public static void addAword(List<String> sortedList,String string){
if(string == null || string.length()==0){
return;
}
String temp = string;
boolean bigger = false;
for(int i=0;i<sortedList.size();i++){
String s = sortedList.get(i);
if(bigger || compare(string,s)<0){
sortedList.set(i, temp);
temp = s;
bigger = true;
}else if(!bigger && compare(string,s) == 0){
return;
}
}
sortedList.add(temp);
}
//单词比较
public static int compare(String str1,String str2){
int length1 = str1.length();
int length2 = str2.length();
int limit = Math.min(length1, length2);
char a[] = str1.toCharArray();
char b[] = str2.toCharArray();
for(int i = 0;i<limit;i++){
char c1 = (char) (a[i]>='a'?a[i]:(a[i]+32));
char c2 = (char) (b[i]>='a'?b[i]:(b[i]+32));
if(c1 != c2){
return c1-c2;
}
}
return length1-length2;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
List<String> resultList = sort(s);
for(int i = 0;i<resultList.size();i++){
if(i == resultList.size()-1){
System.out.print(resultList.get(i));
break;
}
System.out.print(resultList.get(i) + " ");
}
}
}