Java - 在String中检查打开/关闭parens

时间:2014-07-15 21:26:09

标签: java string brackets

我试图弄清楚如何使用parens检查String格式是否正确:()(的{​​{1}}数应与)相同。此外,应该正确格式化parens,以便()形成一对。其他字符可能会显示在String

示例:

"()()()()()()()"   // Valid
"((a)(b)((cd)e))"  // Valid
"((d()mk()))()"    // Valid
"((d()mk())))("    // Invalid, the last two parens don't form a pair.
")()"              // Invalid, not equal number of paren types

所以,我认为第一步是检查()String的数量是否相同(我发现此页面有助于String Brackets in String }})。

我不知道如何接近零件以检查import java.util.*; public class BracketProblem { public boolean checkBrackets(String str) { Stack st = new Stack(); for(int i = 0; i < str.length(); i++){ char x = str.charAt(i); if (x == '(') st.push(x); if (!st.empty()){ if (x == ')') st.pop(); } } if(!st.empty()) return false; else { return true; } } public static void main(String[] args){ String str = args[0]; BracketProblem bp = new BracketProblem(); System.out.println(bp.checkBrackets(str)); } } 格式是否正确。

你们能给我一个提示吗?

编辑:

我的解决方案是:

{{1}}

3 个答案:

答案 0 :(得分:4)

拿一张纸,用铅笔在上面写下你的绳子(笔会做),然后自己做检查,同时跟踪你在纸上的进度。

现在尝试制定你在Java中所做的事情。

更新:抱歉,如果这听起来粗鲁无礼,但是为自己解决问题的能力比任何算法都重要。

答案 1 :(得分:3)

使用堆栈 - 阅读char中的String。在阅读时按(。阅读(时弹出)

需要注意的事项:

  • 如果您阅读)并且堆栈顶部没有(,则表示该错误。
  • 如果你到达String的末尾并且堆栈没有空,则表示该错误。
  • 如果您到达String的末尾且堆栈为空,那么它就是有效的String

以下是解释Stack Concept

的链接

注意:出于您的目的,您可以忽略char中的其他String

答案 2 :(得分:2)

制作一个反变量;在看到(时递增它,并在看到)时递减它。如果您的计数器变量最后不是0,则括号的数量不均匀。

然而,正如评论中建议的ajb一样,请确保计数器变量永远不会消极,因为这意味着)(这样的情况(这是一个偶数个括号,但技术上不匹配)。