我需要为我的一门类(class)解决以下问题:https://open.kattis.com/problems/secretchamber
我的解决方案似乎有效,但第三个测试用例失败了。我实现了问题描述给出的每条规则,并且它解决了两个示例测试用例没有问题。我已经无计可施了,我不知道我做错了什么。
我不会要求任何人以任何方式做我的作业,但任何有关我遗漏的内容的指示将不胜感激。
import java.io.*;
import java.util.*;
class secretchamber
{
public static void main(String[] args)
{
Scanner stdin = new Scanner(System.in);
int numTranslations = stdin.nextInt();
int numPairs = stdin.nextInt();
stdin.nextLine();
ArrayList<Character> trans1 = new ArrayList<Character>(numTranslations);
ArrayList<Character> trans2 = new ArrayList<Character>(numTranslations);
for(int i = 0; i < numTranslations; i++)
{
String temp = stdin.nextLine();
trans1.add(temp.charAt(0));
trans2.add(temp.charAt(2));
}
for(int i = 0; i < numPairs; i++)
{
String temp = stdin.nextLine();
String[] pair = temp.split("\\s+");
char[] a = pair[0].toCharArray();
char[] b = pair[1].toCharArray();
if(translates(a, b, numTranslations, trans1, trans2))
{
System.out.println("yes");
}
else
{
System.out.println("no");
}
}
}
public static boolean translates(char[] a, char[] b, int numTranslations, ArrayList trans1, ArrayList trans2)
{
//false if strings are unequal in length
if(a.length != b.length)
{
return false;
}
//true if strings are the same
else if(a == b)
{
return true;
}
else
{
for(int i = 0; i < a.length; i++)
{
//if current characters are the same, continue
if(a[i] == b[i])
{
continue;
}
//if current index of a directly translates to index of b
else if(trans1.indexOf(a[i]) == trans2.indexOf(b[i]))
{
continue;
}
//if one or both of the characters do not exist within the list of translations
else if(!(trans1.contains(a[i]) && trans2.contains(b[i])))
{
return false;
}
else
{
continue;
}
}
}
return true;
}
}
你对这个问题的理解很陈旧。您需要再次阅读问题中的这一部分。
Two words match if they have the same length and if each letter of the first word can be turned into the corresponding letter of thesecond word by using the available translations zero or more times.
此输入可能会使您的输出变得陈旧。
输入
2 1
一个c
d b
AAAABC
预期输出
没有
您的输出
是的
以下是此问题的解决方案草图。我是从icpc网站上得到的。
我是一名优秀的程序员,十分优秀!