我是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)
{
}
}
}
答案 0 :(得分:0)
您的代码存在逻辑问题,因为它失败了,只是将'not '
(注意空格)识别为花哨的单词。
您可以更改if
逻辑并改用正则表达式。
if (str.matches(".*\\bnot\\b.*")) {
output.append(REAL_FANCY);
} else {
output.append(REGULARLY_FANCY);
}
在这里,正则表达式模式仅匹配整个单词不。可以在here中找到有关此 regex 的详细说明。