算法学习:按指定字母顺序对单词进行排序

例题:已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {"bed", "dog", "dear", "eye"},按照字母顺序排序并打印。本例的输出顺序为:dear, dog, eye, bed。

代码一:

    public void test() {  
        String[] input = {"bed", "dog", "dear", "eye"};  
        for(int i=0; i<input.length-1; i++)  
            for(int j=0; j<input.length-i-1;j++){  
                if(compare(input[j], input[j+1])){  
                    String temp = input[j];  
                    input[j] = input[j+1];  
                    input[j+1] = temp;  
                }  
            }  
        for(String str : input){  
            System.out.println(str);  
        }  
    }  
    public boolean compare(String a, String b){  
        int len1 = a.length();  
        int len2 = b.length();  
        boolean flag = false;  
        for(int i=0; i<(len1<len2?len1:len2); i++){  
            if(toPriority(a.charAt(i))<toPriority(b.charAt(i))){  
                flag = true;  
                break;  
            }else if(toPriority(a.charAt(i))>toPriority(b.charAt(i))){  
                break;  
            }else{  
                continue;  
            }  
        }  
        return flag;  
    }  
    public int toPriority(char c){  
        switch(c){  
        case 'd': return 8;  
        case 'g': return 7;  
        case 'e': return 6;  
        case 'c': return 5;  
        case 'f': return 4;  
        case 'b': return 3;  
        case 'o': return 2;  
        case 'a': return 1;  
        default:return 0;  
        }  
    }  
代码二:
    public class test {  
      
        public static void main(String[] args){  
            String[] inputs = {"bed", "dog","dear", "eye"};  
            final Map<String,Integer> map = new HashMap<String, Integer>();  
            map.put("d", -8);  
            map.put("g", -7);  
            map.put("e", -6);  
            map.put("c", -5);  
            map.put("f", -4);  
            map.put("b", -3);  
            map.put("o", -2);  
            map.put("a", -1);  
              
            Arrays.sort(inputs, new Comparator<String>(){  
      
                public int compare(String s1, String s2) {  
                    //d, g, e, c, f, b, o, a  
                    for (int i = 0; i < s1.length() && i<s2.length(); i++) {  
                        Integer s1Int = map.get(s1.charAt(i)+"");  
                        int a = s1Int!=null? s1Int : s1.charAt(i);  
                          
                        Integer s2Int = map.get(s2.charAt(i)+"");  
                        int b = s2Int!=null? s2Int : s2.charAt(i);  
                        if(a==b){  
                            continue;  
                        }else{  
                            return a-b;  
                        }  
                    }  
                    return s1.length()-s2.length();  
                }  
                  
            });  
            System.out.println(Arrays.toString(inputs));  
        }  
    }  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值