对输入的单词进行字典序排序输出——Java实现

题目描述:

对输入的单词进行字典序排序输出: 字典序定义: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) + " ");
                   }
 
         }
 
}

 

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值