Java在Codechef问题中包含字符串搜索

时间:2019-01-16 17:39:04

标签: java string search contains string-matching

我是Codechef的新手。尝试在FANCY problem statement. 解决简单的问题 复制下面的问题陈述以便于参考:

厨师正在读一些伟大人物的名言。现在,他有兴趣对他知道的所有花哨的报价进行分类。他认为所有包含“ not”一词的花哨报价都是真实花哨;不包含引号的引文通常是花哨的。

给您一些报价。对于每个报价,您需要告诉Chef是真实的还是定期的。

输入 输入的第一行包含一个整数T,表示测试用例的数量。 T测试用例的描述如下。 每个测试用例的第一行也是唯一一行包含一个表示引号的字符串S。

输出 对于每个测试用例,请打印一行包含字符串“ Real Fancy”或“ regularly fancy”(不带引号)的行。

约束 1≤T≤50 1≤| S |≤100 S的每个字符都是小写英文字母或空格 子任务 子任务1(100分):原始约束

示例输入

2

我没有任何花哨的报价

什么都没做的时候往左走

示例输出

真正的幻想

通常看中

我的解决方案在下面,该解决方案在我的计算机上本地运行良好,但是当我尝试在codechef上运行时,给出了 NZEC例外。提交此解决方案将导致“答案错误”。使用了try / catch块,因为我读了here,它会避免出现异常,但答案仍然不正确。我不明白在这个简单的问题上我哪里错了。

/* package codechef; // don't place package name! */

import java.util.Scanner;

public class Main
{
    private final static String REAL_FANCY   = "Real Fancy\n";
    private final static String REGULARLY_FANCY  = "regularly fancy\n";
    private final static String MATCH_WORD   = " not "; //note: space both sides
    private final static String MATCH_WORD_START = "not "; //note: space at end
    private final static String MATCH_WORD_END   = " not";//note: space at start

    public static void main(String[] args)
    {
    try
    {
        Scanner scanner = new Scanner(System.in);
        int testCases = Integer.parseInt(scanner.nextLine());

        StringBuilder output = new StringBuilder();
        String str = null;
        for (int i = 0; i < testCases; i++)
        {
        str = scanner.nextLine();
        if (str.startsWith(MATCH_WORD_START) || str.contains(MATCH_WORD)
            || str.endsWith(MATCH_WORD_END))
            output.append(REAL_FANCY);
        else
            output.append(REGULARLY_FANCY);
        }
        scanner.close();
        System.out.println(output.substring(0, output.length() - 1));
    }
    catch (Exception e)
    {
    }
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码存在逻辑问题,因为它失败了,只是将'not '(注意空格)识别为花哨的单词。

您可以更改if逻辑并改用正则表达式。

if (str.matches(".*\\bnot\\b.*")) {
    output.append(REAL_FANCY);
} else {
    output.append(REGULARLY_FANCY);
}

在这里,正则表达式模式仅匹配整个单词。可以在here中找到有关此 regex 的详细说明。