日期:2014-05-20  浏览次数:20771 次

java面试题,给一组域名排序
google.cn
linggui.gov.cn
baidu.com
google.com.hk
zhidao.baidu.com
google.com
sina.com
tw.msn.com
给上面一组域名排序:
1. 从每个域名的最后一组开始比较(好像要先把域名从. 的地方分开), 按域名的字母先后顺序 (a,b,c,...,z),如果相同依次往前比较。
  例如google.com和baidu.com比较, 先比较com和com,两个com相同,往前比较google与baidu,b在g前,
  因此顺序为:
  baidu.com
  google.com

2. 如果首字目相同,比较下一个字母依次类推
  例如linggui.gov.cn和google.com比较
  先比较cn和com, c相同,比较第二个n与o,n在o前,
  因此顺序为:
  linggui.gov.cn
  google.com

3. 比较如遇到空格放到字母前面,例如zhidao.baidu.com与baidu.com比较,
  顺序为: baidu.com
  zhidao.baidu.com
4. 不考虑?+ 、/等特殊字符

请给出思路及代码,谢谢!(好像用到递归)


------解决方案--------------------
Arrays类有排序功能,然后自己定义一个排序规则就行了

Java code

import java.util.*;

public class Test
{
    public static void main(String[] args)
    {
        String[] strs = new String[] {"google.cn",
                                    "linggui.gov.cn",
                                    "baidu.com",
                                    "google.com.hk",
                                    "zhidao.baidu.com",
                                    "google.com",
                                    "sina.com",
                                    "tw.msn.com"};
        
        Arrays.sort(strs, new Comparator<String>()
            {
                public int compare(String str1, String str2) 
                {
                    String[] strs1 = str1.split("\\.");
                    String[] strs2 = str2.split("\\.");
                    reverse(strs1);
                    reverse(strs2);
                    int length = strs1.length < strs2.length ? strs1.length : strs2.length;
                    for (int i = 0; i < length; i++)
                    {
                        int cmp = strs1[i].compareTo(strs2[i]);
                        if (cmp != 0)
                        {
                            return cmp;
                        }
                    }    
                    return strs1.length - strs2.length;
                }    
                
                private void reverse(String[] strs)
                {
                    for (int i = 0; i < (strs.length + 1) / 2; i++)
                    {
                        String tmp = strs[i];
                        strs[i] = strs[strs.length - i - 1];
                        strs[strs.length - i - 1] = tmp;
                    }
                }
            });
        
        for (int i = 0; i < strs.length; i++)
        {
            System.out.println(strs[i]);
        }
    }
}

------解决方案--------------------
简单
String name="zhidao.baidu.com"; 
String[] splitnames=name.split('.');//用.拆成数组
splitnames=splitnames.reverse(); //反转数组的顺序
这样就反过来了
然后再排序就行了
------解决方案--------------------
我做了一个 不说了上代码 简单易懂
Java code

package test;

import java.util.Arrays;

import org.junit.Test;

import serivce.Servce;

import dao.LogDao;
import dao.LogDaoIml;
import entity.Log;

public class LogDaoImltest {

    @Test
    public void test() {
        //new Servce().and();
         
        YuMing[] yms = {new YuMing("", "google", "cn"),new YuMing("zhidao", "baidu", "com"),new YuMing("", "baidu", "com")};

        
        Arrays.sort(yms);
        for(int i=yms.length-1;i>=0;i--) {
            System.out.println(yms[i]);
        }
    }
    
    static private class YuMing implements Comparable<YuMing> {
        public String head;
        public String center;
        public String end;
        public YuMing(String head, String center, String end) {
            super();
            this.head = head;
            this.center = center;
            this.end = end;
        }
        @Override
        public int compareTo(YuMing ym) {
            if(end.compareTo(ym.end) != 0) {
                return end.compareTo(ym.end);
            }
            if(center.compareTo(ym.center) != 0) {
                return center.compareTo(ym.center);
            }
            
            if(head.compareTo(ym.head) != 0) {
                head.compareTo(ym.head);
            }
            return 0;
        }
        @Override
        public String toString() {
            if(head.equals("")) {
                
                return center+"."+end;
            }
             return head+"."+center+"."+end;
        }
        
         
        
        
        
    }

}