【问题标题】:Java contain string search in codechef problemJava在codechef问题中包含字符串搜索
【发布时间】:2019-06-10 20:40:50
【问题描述】:

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

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

给你一些报价。对于每条报价,您都需要告诉 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)
    {
    }
    }
}

【问题讨论】:

  • cannot 应该是经常喜欢还是真正喜欢?还有我们可以在 codechef 上运行您的代码 sn-p 吗?
  • "cannot" 通常是幻想而不是真正的幻想,因为它不包含 not 作为单词,尽管它包含 not 作为字符序列。是的,代码可以在 codechef 上运行,这就是我得到 NZEC 异常的原因。

标签: java string search contains string-matching


【解决方案1】:

您的代码存在逻辑问题,因为它无法将 'not '(注意空格)识别为花哨字词。

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

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

这里的正则表达式模式只匹配整个单词not。这个regex的详细解释可以在here找到。

【讨论】:

  • 那行不通。以测试用例为例 -> 他不能去。这里的 "cannot" 通常是幻想而不是真正的幻想,因为它不包含 not as word 尽管它包含 not 作为字符序列。跨度>
  • 请考虑为答案投票。
猜你喜欢
  • 2019-09-07
  • 1970-01-01
  • 2021-06-12
  • 2019-05-17
  • 2013-06-26
  • 2013-11-10
  • 2011-05-25
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多