我正在处理以下CodingBat problem:
给定一个包含一对括号的字符串,递归计算一个由括号及其内容组成的新字符串,因此" xyz(abc)123"收益率"(abc)"。
parenBit("xyz(abc)123") → "(abc)" parenBit("x(hello)") → "(hello)" parenBit("(xy)1") → "(xy)"
我试图像这样解决它:
import java.util.LinkedList;
import java.util.List;
public class ParenBit {
public static void main(String arg[]) {
ParenBit p = new ParenBit();
p.solve(arg[0], '(', "");
System.out.println(p.finalResult.toString());
}
private List<String> finalResult = new LinkedList<String>();
private boolean solve(String s, char c, String result) {
if (s.length() == 0)
return false;
char f = s.charAt(0);
if (f == '(') {
boolean b = solve(s.substring(1), ')', result);
if (b) {
result += f + "";
}
if (f == c)
return true;
} else if (f == ')') {
if (c == f) {
result += f + "";
finalResult.add(result);
solve(s.substring(1), '(', "");
return true;
}
} else {
if (c == ')') {
boolean b = solve(s.substring(1), ')', result);
if (b) {
result += f + "";
}
} else if (c == '(') {
return solve(s.substring(1), '(', result);
}
}
return false;
}
}
当我用这个输入调用它时:
哇(论文)
我得到空的结果。我该如何解决这个问题?
答案 0 :(得分:1)
当我将代码粘贴到IDE中时,它会告诉我
if (b) {
result += f + "";
}
分配给&#39; f + ""
&#39;的值result
从未使用过。
这意味着您更新了result
参数,但从未使用更新后的值,因此您始终使用空 solve()
参数调用result
方法。< / p>
答案 1 :(得分:0)
您的代码已更新。 鉴于你的代表你应该能够把它想出来。
此外,如果您需要正确获取结果,则不应该使用List。简单的字符串就可以了。
更多输入。相反,简单的代码尝试遵循给出的指令。 CodingBat期待你编写一个返回String的方法,而不是编写一个程序来将输出存储在变量中。
private String finalResult = "";
private boolean solve(String s, char c, String result) {
if (s.length() == 0)
return false;
char f = s.charAt(0);
if (f == '(') {
result="(";
boolean b = solve(s.substring(1), ')', result);
if (b) {
result += f + "";
}
if (f == c)
return true;
} else if (f == ')') {
if (c == f) {
result += f + "";
finalResult = result;
//finalResult.add(result);
solve(s.substring(1), '(', "");
return true;
}
} else {
if (c == ')') {
result += f + "";
boolean b = solve(s.substring(1), ')', result);
/*if (b) {
result += f + "";
}*/
} else if (c == '(') {
return solve(s.substring(1), '(', result);
}
}
return false;
}
答案 2 :(得分:0)
private boolean solve(String s, char c, String result) {
int bpos = s.lastIndexOf(c);
int epos = s.indexOf(')');
if ((bpos == -1) || (epos == -1) || (epos < bpos)) {
return false;
}
result = s.substring(bpos,++epos);
finalResult.add(result);
return true;
}