CodeEval Alphabet Blocks挑战

时间:2015-08-16 23:52:43

标签: java regex

我正在开展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");
        }
   }
 }
}

1 个答案:

答案 0 :(得分:1)

嗯,这是一个示例输入,您的代码将无法通过:

3 | DOG | DOXXXX DXXXXX GXXXXX

您的代码将按顺序搜索和标记块。它会将第一个块分配给D而不是O,然后o不再有块。

也许你可以先尝试搜索最少的单词