华为oj之字典排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mushao999/article/details/45394317
描述:
将由英文单词和分隔符组成的字符串按字典排序输出
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()方法。



猜你喜欢

转载自blog.csdn.net/mushao999/article/details/45394317