主机名排序

主机名排序

主机名由多级域名组成,自右向左,依次是顶级域名、二级域名、三级域名…..以此类推  
例,主机名: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《计算机应用》实践考核,《管理系统中计算机应用》实践性环节考核方案

一、参考教材&#xff1a;《管理系统中计算机应用》&#xff0c;汪星明、周山芙主编&#xff0c;武汉大学出版社2004年版。二、考核时间&#xff1a;50分钟。三、考核内容及分数分布&#xff1a;1、Windows资源管理器的综合应用(10分)1)启动资源管理器。2)熟练掌握文件(夹)的建…

信号中断 与 慢系统调用

1. 术语 1.1. 慢系统调用&#xff08;Slow system call&#xff09; 该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回&#xff0c;多数网络支持函数都属于这一类。如&#xff1a;若没有客户连接到服务器上&#xff0c;那么服务器的accept调用…

delete hive_Hive高级调优

Hive调优策略Hive作为大数据领域常用的数据仓库组件&#xff0c;在设计和开发阶段需要注意效率。影响Hive效率的不仅仅是数据量过大;数据倾斜、数据冗余、job(小文件多)或I/O过多、MapReduce分配不合理等因素都对Hive的效率有影响。对Hive的调优既包含对HiveQL语句本身的优化&a…

联想计算机如何设置用户名和密码,联想电脑怎样设密码?联想电脑设置密码方法步骤【图文】...

现代 人最重要的是什么呢?在笔者看来是隐私。如今由于我们的社会比较发达&#xff0c;而信息传播的速度有非常广泛&#xff0c;加上各种隐私被盗取或者偷窥&#xff0c;让现代人的生活总是充斥着不安&#xff0c;所以我们各类的电子设备诸如手机&#xff0c;电脑加密是非常有必…

linux中errno使用

当linux中的C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因&#xff0c;在实际编程中用这一招解决了不少原本看来莫名其妙的问题。但是errno是一个数字&#xff0c;代表的具体含义还要到errno.…

unity3d 捕获系统日志,来处理一些问题

注册系统日志回调&#xff0c;根据日志内容和类型处理一些特殊问题 using UnityEngine; using System.Collections;public class SetupVerification : MonoBehaviour {public string message "";private bool badSetup false;void Awake (){Application.RegisterL…

em算法 实例 正态分布_EM算法解GMM

看了很多介绍EM算法的文章&#xff0c;但是他们都没有代码&#xff0c;所以在这里写出来。Jensen 不等式参考期望最大算法Jensen不等式在优化理论中大量用到&#xff0c;首先来回顾下凸函数和凹函数的定义。假设 是定义域为实数的函数&#xff0c;如果对于所有的 &#xff0c; …

html5 webview,HTML5+学习历程之webview经典案例

看了这么多app&#xff0c;其实基本布局使用的最多的无非两种&#xff0c;如下图&#xff1a;类似微信类似QQ在这里小编简单说下这两种布局简单的实现思路&#xff0c;当然如果你还有更好的方法&#xff0c;请在下面留言&#xff0c;让更多人知道你更好的方法&#xff01;第一种…

C函数的实现(strcpy,atoi,atof,itoa,reverse)

在笔试面试中经常会遇到让你实现C语言中的一些函数比如strcpy&#xff0c;atoi等 1. atoi 把字符串s转换成数字 int Atoi( char *s ) {int num 0, i 0;int sign 1;for( i0; isspace(s[i]); i );sign (s[i] -)? -1:1;if( s[i] || s[i] - )i;for( ;isdigit(s[i]); i ){n…

bbb sdk6 ll_rw_block分析

ll_rw_block是文件系统对下访问实际的块设备驱动的接口&#xff0c;应用程序对实际文件&#xff08;非设备文件&#xff09;的操作&#xff0c;最终都是 通过文件系统来调用ll_rw_block来操作实际的存储设备的。 当然ll_rw_block的实际作用远非一个接口那么简单&#xff0c;他…

wifi 小米pro 驱动 黑苹果_搞定小米黑苹果自带WIF,又可省一个USB接口了

首先声明我的是小米笔记本PRO版本的&#xff0c;其他版本的没有经过测试&#xff0c;但理论都是没有问题的&#xff0c;其他版本的朋友&#xff0c;喜欢折腾的话&#xff0c;可以试试&#xff01;自用版本关于小米笔记本安装黑苹果&#xff0c;网上一直都有很多链接&#xff0c…

教师资格证计算机考察知识点,教师资格证考试信息技术常考知识点同步练习题.docx...

教师资格证考试信息技术常考知识点同步练习题一、信息的定义及特征( 一) 信息定义信息是通过文字、数字、图像、图形、声音、视频等方式进行传播的内容。说明&#xff1a;信息定义考查的方式有两类&#xff1a;一类是选出四个选项中是信息的 ; 另一类是判断选择题&#xff0c;选…

machine learning for hacker记录(4) 智能邮箱(排序学习推荐系统)

本章是上一章邮件过滤技术的延伸&#xff0c;上一章的内容主要是过滤掉垃圾邮件&#xff0c;而这里要讲的是对那些正常的邮件是否可以加入个性化元素&#xff0c;由于每个用户关心的主题并非一样&#xff08;有人喜欢技术类型的邮件或者购物促销方便的内容邮件等&#xff09;。…

代理模式 委派模式 策略模式_策略模式

在策略模式(Strategy Pattern)中&#xff0c;一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中&#xff0c;我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。介绍意…

云南计算机专业知识真题,2014年云南省事业单位考试专计算机专业知识模拟真题.doc...

2014年云南省事业单位考试专计算机专业知识模拟真题1 在Word中替换的快捷键是____。A、CTRLFB、CTRLHC、CTRLSD、CTRLP2 在Word中打印的快捷键是____。A、CTRLFB、CTRLHC、CTRLOD、CTRLP3 在Word中打开新文档的快捷键是____。A、CTRLFB、CTRLHC、CTRLOD、CTRLP4 在Word中&#…

bbb mmc_blk_probe 分析

bbb 的 emmc驱动在drivers\mmc\card\block.c&#xff0c;其mmc_dirver结构体如下&#xff0c; 根据以往平台总线驱动模型的经验来看的话&#xff0c;内核里应该有mmc_devices结构体&#xff0c;并且 其name也为"mmcblk"&#xff0c;这样其probe函数将被调用&#x…

培智学校计算机课教案,培智数学教案

教学内容&#xff1a;11—20以内数的认识 写数 教学目的&#xff1a;1、使学生能初步地数、读、写(本节课重点看图写20以内的数。) 2、初步会写小棒图、数位表上的数&#xff0c;掌握20以内数的顺序。3、初步简单掌握20以内数的组成。 教学重点&#xff1a;学生看图会数数量并会…

例2-1

#include<stdio.h> int main(void) {printf("Hello World!\n");return 0; } 转载于:https://www.cnblogs.com/520zy/p/3348951.html

java第七章jdbc课后简答题_Java周测题08.13

1.关于Mybatis的描述正确的是&#xff1a;Mybatis是持久层框架&#xff0c;Mybatis封装了JDBC&#xff0c;Mybatis简化了代码的编辑和使用&#xff0c;Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;Mybatis采用了OCP(对象关系映射)的方式封装了数据…

linux中probe函数中传递的参数来源(上)

linux中probe函数传递参数的寻找&#xff08;上&#xff09; 上一篇中&#xff0c;我们追踪了probe函数在何时调用&#xff0c;知道了满足什么条件会调用probe函数&#xff0c;但probe函数中传递的参数我们并不知道在何时定义&#xff0c;到底是谁定义的&#xff0c;反正不是我…