题目链接
题目描述:
小发明家弗里想创造一种新的语言,众所周知,发明一门语言是非常困难的,首先你就要克服一个困难就是,有大量的单词需要处理,现在弗里求助你帮他写一款程序,判断是否出现重复的两个单词。
输入描述
第 11 行,输入 NN,代表共计创造了多少个单词。
第 22 行至第 N+1N+1 行,输入 NN 个单词。
1\leq N \leq 10^41≤N≤10
4
,保证字符串的总输入量不超过 10^610
6
。
输出描述
输出仅一行。若有重复的单词,就输出重复单词,没有重复单词,就输出 NO,多个重复单词输出最先出现的。
输入输出样例
示例1
输入
6
1fagas
dsafa32j
lkiuopybncv
hfgdjytr
cncxfg
sdhrest
输出
NO
示例2
输入
5
sdfggfds
fgsdhsdf
dsfhsdhr
sdfhdfh
sdfggfds
输出
sdfggfds
分析:
1.首先我们可以想到使用HashSet,因为HashSet是基于一一对应的函数,可以查找检测之前是否出现这个元素,在这里正好可以查找是否有重复的语言。
2.程序流程:
3.代码如下:
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashSet<String> hashSet = new HashSet<>();
int n= sc.nextInt();
sc.nextLine();
int t = n;
String ans = " ";
while(t-->0){
String s = sc.nextLine();
if(!hashSet.add(s)){
ans = s;
}
}
if(hashSet.size()==n){
System.out.println("NO");
}else{
System.out.println(ans);
}
}
}
4.对于其中的sc.nextLine();
再次强调如果不使用的话(吸收换行),运行的结果是错误的,因为单独的换行符是算作一个字符串的。
5.对于
if(!hashSet.add(s)){
ans = s;
}
对于什么是HashSet,