您的位置:首页 > 其它

华为oj之字典排序

2015-04-30 14:17 441 查看
描述:

将由英文单词和分隔符组成的字符串按字典排序输出

1)字符说明:文本中只包含下面定义的字符

单词字符:a~z字母,A~Z字母,连字符‘-’(连字符是单词的组成部分)

2)分隔符:

空格:‘ ’

3)格式和单词解析

单词:相邻两个分隔符之间的单词字符组成一个单词。

4)字典顺序定义:

1、单词中字母(包括连字符)比较不区分大小写。两个单词先以第一个字母作为排序的基准,如果第一个字母相同,就用第二个字母为基准,如果第二个字母相同就以第三个字母为基准。依此类推,如

果到某个字母不相同,字母顺序在前的那个单词顺序在前。连字符排在所有字母前面。

2、当一个短单词和一个长单词的开头部分都相同(即短单词是长单词从首字母开始的一部分),短单词顺序在前。

3、所有的单词都按上面定义的顺序排列,就构成了字典顺序。

说明:输入无其它特殊字符,不用考虑。

知识点:

题目来源: 内部整理

练习阶段: 初级

运行时间限制: 无限制

内存限制: 无限制

样例输入:

123 12 1 abcd ABC ab A aa BB ab aC

样例输出:

1 12 123 A aa ab ab ABC abcd aC BB

思路

首先将字符串按照空格分割开,然后利用collections的sort方法,并重写cmparator的compareTo方法,在该方法中,以字符的asccii的大写排序,如果前缀完全一样,输出短的。

代码

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

public class Main{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
sc.close();
List<String> result=java.util.Arrays.asList(str.split(" "));
Collections.sort(result,new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
int i=0;
while(i<str1.length()&&i<str2.length())
{
Character c1=Character.toLowerCase(str1.charAt(i));
Character c2=Character.toLowerCase(str2.charAt(i));
if(c1!=c2)
{
return c1.compareTo(c2);
}
i++;
}
return ((Integer)str1.length()).compareTo(str2.length());
}
});
for(int i=0;i<result.size()-1;i++)
{
System.out.print(result.get(i)+" ");
}
System.out.println(result.get(result.size()-1));
}
}


通过本练习,熟悉和基本掌握了Colletcions的sort方法,其关键是要重写compareTo方法。另外将String[]装换为list采用Arrays.asList()方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: