解题(ConflictPhoneNumber--冲突的电话号码)

时间:2022-02-25 13:52:26

题目描述

移动推出的校内网短号和亲情网短号非常方便,但在某款新手机里却出现了尴尬的bug。例如,当通讯录中包含如下号码时:
1.小王:600
2.小李:467654
3.小张:600010
输入600时,手机会直接自动打给了小王,因此永远没法打给小张。现在有很多部手机都有这种问题,<span>nowcoder</span>想要找到一个办法来判断每个号码簿里的号码是不是有这种冲突。

输入描述:

输入有多组数据。

每组数据第一行是一个整数n,(1≤n≤10000)。

紧接着有n行电话号码,号码只有数字组成,长度不超过11位。

输出描述:

对应每组输入,有一行输出:如果电话簿中存在冲突的号码,就输出“Yes”;否则输出“No”。
示例1

输入

复制

3
911
97625999
91125426
5
113
12340
123440
12345
98346

输出

复制

Yes
No

代码如下:

 package com.yzh.xuexi;

 import java.util.Arrays;
import java.util.Scanner; public class ConflictPhoneNumber { public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
while(scanner.hasNext()){
int n=Integer.valueOf(scanner.nextLine());
String[] arr=new String[n];
for (int i = 0; i < arr.length; i++) {
arr[i]=scanner.nextLine();
}
System.out.println(conflictPhoneNumber(arr));
}
scanner.close(); } //也可用字典树解决
private static String conflictPhoneNumber(String[] arr) {
Arrays.sort(arr);//利用Arrays内置sort()函数对字符串按默认规则从小到大排序(也可以自己实现快排、希尔排序、归并排序和堆排序等n㏒n复杂度排序方法降低整个算法的复杂度)
//字符串从小到大排序后,只有相邻的两个字符串可能存在第二个字符串以第一个字符串开头的关系
for(int i=1;i<arr.length ;i++){
if (arr[i].indexOf(arr[i-1])==0) {
return "YES";
}
}
return "NO";
} }