java新手参加网易编程赛,自己测试通过,提交却出错,求助

游北亮
领域专家: 后端开发技术领域
2010-05-29 09:23:04
题目:
现在给你N个单词和一些查询,请输出提示结果,为了简化这个问题,只需要输出以查询词为前缀的并且按字典序排列的最前面的8个单词,如果符合要求的单词一个也没有请只输出当前查询词。
输入
第一行是一个正整数N,表示词表中有N个单词。
接下来有N行,每行都有一个单词,注意词表中的单词可能有重复,请忽略掉重复单词。所有的单词都由小写字母组成。
接下来的一行有一个正整数Q,表示接下来有Q个查询。
接下来Q行,每行有一个单词,表示一个查询词,所有的查询词也都是由小写字母组成,并且所有的单词以及查询的长度都不超过20,且都不为空
其中:N<=10000,Q<=10000
输出
对于每个查询,输出一行,按顺序输出该查询词的提示结果,用空格隔开。


我自己在本地测试没发现任何问题,提交后,总是说Wrong Answer
请指点应该是哪里出错了?
方便我这个新手参加明天新题目的比赛


代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int len = sc.nextInt();
//sc.nextLine();
String[] arr = new String[len];

for(int i=0;i<len;i++){
String tmp = sc.next();
while(f1(arr, tmp, i, true)){tmp = sc.next();}
arr[i] = tmp;
}

//f2(arr);

len = sc.nextInt();//sc.nextLine();
String[] ar2 = new String[len];
for(int i=0;i<len;i++){
String tmp = sc.next();
while(f1(ar2, tmp, i, false)){tmp = sc.next();}
ar2[i] = tmp;
}

for(String i:ar2){
String[] ret = new String[arr.length];
int tmp=0;
for(String j:arr){
if(j.startsWith(i)){
ret[tmp]=j;tmp++;
if(tmp >7)
break;
}
}
if(ret[0]==null)
System.out.println(i);
else{
quickSort(ret, 0, tmp-1);
Boolean out= false;
for(int z=0;z<tmp;z++){
if(out)
System.out.print(" ");
System.out.print(ret[z]);
out = true;
}
System.out.println();
}
}
}

public static Boolean f1(String[] arg, String a, int len, Boolean check){
if(len==0)
return false;
if(a.length()==0 || a.length()>20)
return true;
if(check)
for(int i=0;i<len;i++){
if(arg[i].equals(a))
return true;
}
return false;
}
public static void f2(String[] arg){
for(String i:arg)
System.out.println(i);
}

public static void quickSort(String[] strDate,int left,int right){
String middle,tempDate;
int i,j;
i=left;
j=right;
middle=strDate[(i+j)/2];
do{
while(strDate[i].compareTo(middle)<0&& i<right)
i++; //找出左边比中间值大的数
while(strDate[j].compareTo(middle)>0&& j>left)
j--; //找出右边比中间值小的数
if(i<=j){ //将左边大的数和右边小的数进行替换
tempDate=strDate[i];
strDate[i]=strDate[j];
strDate[j]=tempDate;
i++;
j--;
}
}while(i<=j); //当两者交错时停止

if(i<right){
quickSort(strDate,i,right);//从
}
if(j>left){
quickSort(strDate,left,j);
}
}

}
...全文
180 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
niejimaoo 2010-05-30
  • 打赏
  • 举报
回复
帮顶~
游北亮 2010-05-29
  • 打赏
  • 举报
回复
完整的题目描述:
描述
在有道搜索框中,当输入一个或者多个字符时,搜索框会出现一定数量的提示,如下图所示:


现在给你N个单词和一些查询,请输出提示结果,为了简化这个问题,只需要输出以查询词为前缀的并且按字典序排列的最前面的8个单词,如果符合要求的单词一个也没有请只输出当前查询词。
输入
第一行是一个正整数N,表示词表中有N个单词。
接下来有N行,每行都有一个单词,注意词表中的单词可能有重复,请忽略掉重复单词。所有的单词都由小写字母组成。
接下来的一行有一个正整数Q,表示接下来有Q个查询。
接下来Q行,每行有一个单词,表示一个查询词,所有的查询词也都是由小写字母组成,并且所有的单词以及查询的长度都不超过20,且都不为空
其中:N<=10000,Q<=10000
输出
对于每个查询,输出一行,按顺序输出该查询词的提示结果,用空格隔开。
样例输入
10
a
ab
hello
that
those
dict
youdao
world
your
dictionary
6
bob
d
dict
dicti
yo
z
样例输出
bob
dict dictionary
dict dictionary
dictionary
youdao your
z
amdgaming 2010-05-29
  • 打赏
  • 举报
回复
看看。。。。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧