我正在开展CodeEval挑战,这是它的描述:
挑战说明:
当我们学习如何使用字母块来形成不同的单词时,我们都记得那些童年时代,例如MOM,DAD,TRAIN等。我们建议你暂时提醒这段时间,想象自己还是个孩子。 所以,你有一套字母块。每个街区的六个面上都有一个字母。此外,你有一个与你想要形成的童年相关的词。 编写一个程序,验证是否可以从集合中形成必要的单词。如果是,则打印" True" stdout;否则,打印"错误"。 您只能从字母块中选择一个字母,并按任意顺序放置块。
INPUT SAMPLE:
第一个参数是文件的路径。每行包含测试用例,这三个参数由管道符号" |"分隔。 1.该行中的第一个参数是一个数字,表示该集合中有多少个块。 第二个是你要形成的一个词。 第三个是字母数组列表。字母块的一个面包括阵列中的一个字母。 例如: 有一系列字母" ABCDEF"。它指的是一个具有以下面孔的玩具块: " A"," B"," C"," D"," E"," F& #34;
4 | DOG | UPZRHR INOYLC KXDHNQ BAGMZI
6 | HAPPY | PKMFQP KTXGCV OSDMAJ SDSIMY OEPGLE JZCDHI
5 | PLAIN | BFUBZD XMQBNM IDXVCN JCOIAM OZYAYH
输出样本:
True
True
False
由于某种原因我的代码部分通过,有人可以告诉我我做错了什么吗? 这是我的代码:
public class AlphabetBlocks {
public static void main(String[] args) {
File file = new File(args[0]);
BufferedReader buffer = new BufferedReader(new FileReader(file));
String line;
while ((line = buffer.readLine()) != null) {
line = line.trim();
String[] separate = line.split(" \\| ");
String[] blocks = separate[2].split("\\s+");
separate[1] = separate[1].trim();
for (int i = 0; i < separate[1].length(); i++) {
for (int j = 0; j < blocks.length; j++) {
if (blocks[j].contains(separate[1].toUpperCase().charAt(i)+"")) {
blocks[j]="";
separate[1] = separate[1].replaceFirst(separate[1].charAt(i)+"", "0");
break;
}
}
}
if (separate[1].matches("\\d+")) {
System.out.println("True");
} else {
System.out.println("False");
}
}
}
}
答案 0 :(得分:1)
嗯,这是一个示例输入,您的代码将无法通过:
3 | DOG | DOXXXX DXXXXX GXXXXX
您的代码将按顺序搜索和标记块。它会将第一个块分配给D
而不是O
,然后o
不再有块。
也许你可以先尝试搜索最少的单词