Java 在 codechef 问题中包含字符串搜索
Java contain string search in codechef problem
我是 codechef 的新手。尝试在 FANCY problem statement. 解决简单问题
复制以下问题陈述以供参考:
大厨正在阅读一些伟人的名言。现在,他有兴趣对他知道的所有花哨的引语进行分类。他认为所有包含单词 "not" 的花哨引语都是 Real Fancy;不包含它的报价通常很花哨。
你得到了一些引述。对于每个报价,您需要告诉大厨它是真正的花式还是普通花式。
输入
输入的第一行包含一个整数 T,表示测试用例的数量。 T 测试用例的描述如下。
每个测试用例的第一行也是唯一一行包含一个表示引号的字符串 S。
输出
对于每个测试用例,打印包含字符串 "Real Fancy" 或 "regularly fancy"(不带引号)的单行。
约束条件
1≤T≤50
1≤|S|≤100
S的每个字符要么是小写英文字母,要么是space
子任务
子任务 #1(100 分):原始约束
示例输入
2
我没有任何花哨的引语
什么都不行就往左走
示例输出
真正的幻想
经常喜欢
我的解决方案低于 运行 在我的机器上本地正常,但当我尝试在 codechef 上 运行 时出现 NZEC 异常 。提交此解决方案会导致 "Wrong Answer"。使用 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)
{
}
}
}
您的代码存在逻辑问题,因为它无法将 'not '
(注意 space)识别为花哨词。
您可以更改 if
逻辑并改用正则表达式。
if (str.matches(".*\bnot\b.*")) {
output.append(REAL_FANCY);
} else {
output.append(REGULARLY_FANCY);
}
这里的正则表达式模式只匹配整个单词 而不是 。 regex 的详细解释可以在 here 中找到。
我是 codechef 的新手。尝试在 FANCY problem statement. 解决简单问题 复制以下问题陈述以供参考:
大厨正在阅读一些伟人的名言。现在,他有兴趣对他知道的所有花哨的引语进行分类。他认为所有包含单词 "not" 的花哨引语都是 Real Fancy;不包含它的报价通常很花哨。
你得到了一些引述。对于每个报价,您需要告诉大厨它是真正的花式还是普通花式。
输入 输入的第一行包含一个整数 T,表示测试用例的数量。 T 测试用例的描述如下。 每个测试用例的第一行也是唯一一行包含一个表示引号的字符串 S。
输出 对于每个测试用例,打印包含字符串 "Real Fancy" 或 "regularly fancy"(不带引号)的单行。
约束条件 1≤T≤50 1≤|S|≤100 S的每个字符要么是小写英文字母,要么是space 子任务 子任务 #1(100 分):原始约束
示例输入
2
我没有任何花哨的引语
什么都不行就往左走
示例输出
真正的幻想
经常喜欢
我的解决方案低于 运行 在我的机器上本地正常,但当我尝试在 codechef 上 运行 时出现 NZEC 异常 。提交此解决方案会导致 "Wrong Answer"。使用 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)
{
}
}
}
您的代码存在逻辑问题,因为它无法将 'not '
(注意 space)识别为花哨词。
您可以更改 if
逻辑并改用正则表达式。
if (str.matches(".*\bnot\b.*")) {
output.append(REAL_FANCY);
} else {
output.append(REGULARLY_FANCY);
}
这里的正则表达式模式只匹配整个单词 而不是 。 regex 的详细解释可以在 here 中找到。