我最近开始使用Java尝试POJ。我遇到problem(在UVa上也可用here),它被称为树恢复。这是我的代码:
import java.util.Scanner;
public class Main {
static String pre, in;
static char[] post = new char[100];
static int len;
public static void solve(int p1, int p2, int m1, int m2) {
if (p1 > p2)
return;
int i;
for (i = m1; i <= m2; i++) {
if(in.charAt(i)==pre.charAt(p1))
break;
}
post[--len] = pre.charAt(p1);
if (p1 == p2)
return;
solve(p1 + (i + 1) - m1, p2, i + 1, m2);
solve(p1 + 1, p1 + i - m1, m1, i - 1);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
pre = sc.next();
in = sc.next();
len = pre.length();
solve(0, len - 1, 0, len - 1);
System.out.println(post);
}
}
}
使用eclipse的默认编译选项,代码在给定的测试用例上运行良好。但是当我提交时,它会报告运行时错误。我想知道这是怎么回事。谢谢。
答案 0 :(得分:0)
也许引擎运行的测试用例与您尝试的不同,并且您的代码有一个缺陷,会在这些情况下产生运行时错误。这很可能是由某种非法访问造成的。
例如;
while (sc.hasNextLine()) {
pre = sc.next();
in = sc.next();
...
}
看起来很可疑。经过一次sc
检查后,您确定next()
有两个hasNextLine()
可用吗?
此外;检查数组索引:if(in.charAt(i)==pre.charAt(p1))
和post[--len] = pre.charAt(p1)
。您可以尝试在每行之前使用断言:assert(post.length < len - 1 && pre.length() < p1)
。
你能想到那些线路可能会失败的输入吗?您可能正在尝试访问不存在的数组或字符串的索引。针对此类案例测试您的代码。