蓝桥杯省赛夺奖冲刺营散列表篇 「弗里的的语言」
题目描述
小发明家弗里想创造一种新的语言,众所周知,发明一门语言是非常困难的,首先你就要克服一个困难就是,有大量的单词需要处理,现在弗里求助你帮他写一款程序,判断是否出现重复的两个单词。
输入描述
第 1行,输入 N,代表共计创造了多少个单词。
第 2行至第 N+1行,输入 N 个单词。
输出描述
输出仅一行。若有重复的单词,就输出重复单词,没有重复单词,就输出 NO,多个重复单词输出最先出现的。
输入输出样例
示例1
输入
6
1fagas
dsafa32j
lkiuopybncv
hfgdjytr
cncxfg
sdhrest
输出
NO
示例2
输入
5
sdfggfds
fgsdhsdf
dsfhsdhr
sdfhdfh
sdfggfds
输出
sdfggfds
【13届蓝桥杯夺奖冲刺营|蓝桥杯省赛夺奖冲刺营散列表篇】运行限制
最大运行时间:3s
最大运行内存:512M
import java.util.Scanner;
public class Main {
static final int h=999983;
//余数
static String[] Value=https://www.it610.com/article/new String[h];
//散列表
static String[] UpValue=new String[h];
//公共溢出区
static int UpValueCount=0;
//溢出区所含数
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
//单词个数
boolean flag=false;
//是否冲突
String ans="NO";
//答案
while(n-->0) {
String word=sc.next();
if(flag) {
continue;
}
if(isAt(word)) {//已经有这个单词
flag=true;
ans=word;
}else {//添加单词
in(word);
}
}
System.out.println(ans);
}
private static boolean in(String word) {
int n=Hx(word);
if(Value[n]==null) {
Value[n]=word;
return true;
}else if(Value[n].equals(word)){//已经有这个单词了
return false;
}else {
for (int i = 0;
i < UpValueCount;
i++) {
if(UpValue[i].equals(word)) {
return false;
}
}
UpValue[UpValueCount++]=word;
return true;
}
}
private static boolean isAt(String word) {
int n=Hx(word);
//所在位置
if(Value[n]==null) {//没有单词
return false;
}else if(Value[n].equals(word)){//散列表有这个单词
return true;
}else {//公共区有
for (int i = 0;
i < UpValueCount;
i++) {
if(UpValue[i].equals(word)) {
return true;
}
}
return false;
}
}
private static int Hx(String word) {
return (word.hashCode()%h+h)%h;
}
}
推荐阅读
- 13届蓝桥杯夺奖冲刺营|蓝桥杯省赛夺奖冲刺营贪心算法
- 蓝桥杯单片机|蓝桥杯单片机 省赛 第13届模拟题
- 13届蓝桥杯夺奖冲刺营|蓝桥杯省赛夺奖冲刺营链表篇
- 蓝桥杯学习|【第十三届蓝桥杯单片机省赛模拟冲刺02】
- Java设计模式|Java设计模式之概述与七大设计原则
- 设计模式|设计模式七大原则及概述
- #|学习笔记【23种设计模式-第一节(设计模式的七大原则及初步了解UML】)
- 面向对象设计模式|设计模式——工厂方法模式
- 图解设计模式|<Java设计模式>(一)内容介绍 | 设计模式七大原则