主机名排序
                            
                            
                            主機名排序   
                        
                        
                        主機名由多級域名組成,自右向左,依次是頂級域名、二級域名、三級域名…..以此類推??
例,主機名:google.com.hk
hk是頂級域名?
com是二級域名?
google是三級域名?
現在我們需要實現一個主機名的排序功能?
排序規則?
1)主機名按照域名等級排序,即先按照頂級域名排序,頂級域名相同的再按照二級域名排序,頂級和二級域名均相同的再按照三級域名排序,以此類推,直到整個主機名排序完畢?
2)如果短主機名是由長主機名從頂級域名開始的連續一個或多個域名組成,短主機名排在長主機名前面。例:google.com?排在gmail.google.com?之前?
3)每一級域名按照字典順序排序,字典順序定義見下頁?
輸入確保符合以下規則(無需檢查)
1)主機名以字符串形式給出,非空串
2)主機名中僅包含小寫英文字母和分隔符’.’
3)主機名中沒有連續的’.’,不以’.’開始,也不以’.’結束?
3)主機名不存在重復
字典順序定義
1、兩個單詞(字母按照自左向右順序)先以第一個字母作為排序的基準,如果第一個字母相同,就用第二個字母為基準,如果第二個字母相同就以第三個字母為基準。依此類推,如果到某個字母不相同,字母順序在前的那個單詞順序在前。?
?????例:abc?排在?abf?之前?
2、如果短單詞是長單詞從首字母開始連續的一部分,短單詞順序在前。?
?????例:abc?排在?abcd?之前
?
測試用例:
public class DemoTest extends TestCase {// tearDown: 在每個用例后執行一次protected void tearDown() {Demo.clear();}// 序列號越界public void testCase01() {String[] input = { "mail.huawei.com", "huawei.com", "teltalk.org","google.com.hk", "imail.huawei.com" };for (int i = 0; i < input.length; ++i) {assertEquals(0, Demo.add_host_name(input[i]));}assertEquals(null, Demo.get_host_name(6));}// 樣例用例:mail.huawei.com huawei.com teltalk.org google.com.hk// imail.huawei.compublic void testCase02() {String[] input = { "mail.huawei.com", "huawei.com", "teltalk.org","google.com.hk", "imail.huawei.com" };String[] expect = { "huawei.com", "imail.huawei.com","mail.huawei.com", "google.com.hk", "teltalk.org" };for (int i = 0; i < input.length; ++i) {assertEquals(0, Demo.add_host_name(input[i]));}for (int i = 0; i < input.length; ++i) {assertEquals(expect[i], Demo.get_host_name(i + 1));}}
?
?
解答:
public final class Demo {private static List<String> nameList=new LinkedList<String>();/*****************************************************************************Description : 添加主機名Input Param : host_name 主機名字符串,非空串Output Param : 無Return Value : 成功返回0,失敗返回-1*****************************************************************************/public static int add_host_name( String host_name){if(host_name!=null && !"".equals(host_name)){int i=nameList.size()/2;int min=0;int max=nameList.size();String[] inserts=host_name.split("[.]"); out: while(true){if(i==max){break out;}String[] befores=nameList.get(i).split("[.]");int x=0;char[] beforechars=null;char[] insertchars=null;//將分隔后的String挨個字符比較,若當前String包含字符前一部分全相同則比較長度,否則繼續循環while(x<Math.min(befores.length, inserts.length)){String before=befores[befores.length-1-x];String insert=inserts[inserts.length-1-x];beforechars=before.toCharArray();insertchars=insert.toCharArray();for(int y=0;y<Math.min(beforechars.length, insertchars.length);y++){if(beforechars[y]==insertchars[y]){continue;}else if(beforechars[y]>insertchars[y]){max=i;i=(i+1+min)/2;continue out;}else if(beforechars[y]<insertchars[y]){min=i;i=(i+1+max)/2;continue out;}}if(beforechars.length>insertchars.length){max=i;i=(i+1+min)/2;continue out;}else if(beforechars.length<insertchars.length){min=i;i=(i+1+max)/2;continue out;}x++;}if(befores.length>inserts.length){max=i;i=(i+1+min)/2;continue out;}else if(befores.length<inserts.length){min=i;i=(i+1+max)/2;continue out;}}nameList.add(i,host_name);return 0;}return -1;}/*****************************************************************************Description : 獲取主機名Input Param : serial_number 排序后的序列號,從1開始Return Value : 主機名字符串*****************************************************************************/public static String get_host_name(int serial_number){/* 在這里實現功能 */if(nameList!=null && nameList.size()>=serial_number){return nameList.get(serial_number-1);}return null;}/*****************************************************************************Description : 清空所有主機名Input Param : 無Output Param : 無Return Value : 無*****************************************************************************/public static void clear(){nameList=new LinkedList<String>();/* 在這里實現功能 */}?
posted on 2013-09-22 20:38 劉滸 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/liuhu/p/3333818.html
總結
                            
                        - 上一篇: lstm 做航迹预测预测_用lstm预测
 - 下一篇: Python爬虫入门:初识爬虫