如何检查括号是否平衡(扭曲)

时间:2016-01-19 01:24:09

标签: java string balance

所以我正在努力学习Java,而且我被困在一项任务上。该任务要求类似于字符串是否平衡的东西,有一个奇怪的扭曲。如果所有左括号在闭括号之前先出现,它只能返回true。

是的:

((()))

(())

()

题:

()()

(())()

我已经编码只是一个正常的“检查是否平衡”但我不明白如何添加这个小扭曲。我真的只是掌握了基础知识,所以我并不真正理解像数组这样的东西,非常感谢帮助。

3 个答案:

答案 0 :(得分:0)

可能不是最好的解决方案,但是根据您提供的示例,这可行

   String pattern = "((((()))))";
   char matcher = '(';
   int count = 0;

   for (char c : pattern.toCharArray()) {
       if (c == matcher) count++;
   }


   for (int i = 0; i < pattern.length(); i++) {
       if (pattern.charAt(i) == ')' && i < count) {
           System.out.println("UNBALANCED");
       }
   }

这仅适用于您所述的扭曲。你可能想要使用正则表达式来做这样的事情。

答案 1 :(得分:0)

您可以使用Javas Pattern Matching!

String test1 = "((()))";
String test2 = "()";
System.out.println(test1.matches("\\(+\\)+")); // Should Return True
System.out.println(test2.matches("\\(+\\)+")); // Should Return True

String test3 = "()()";
String test4 = "(())()";
System.out.println(test3.matches("\\(+\\)+")); // Should Return False
System.out.println(test4.matches("\\(+\\)+")); // Should Return False

解释正则表达式“\(+ \)+”。首先,你需要通过使用“\(+”,+表示一个或多个来检测它是否打开。然后你需要通过使用“\”+“检测它何时被关闭。使用\的原因是因为你需要转义(和),因为它们是java Patterns中的构造,你只想让它们成为字符串中的普通字符。

答案 2 :(得分:0)

使用ArrayDeque。

在try块中,遇到左侧括号时,将它们推到顶部。当您遇到右侧括号时,每次都会从Deque中弹出一个元素。如果右侧括号太多或者它们在左侧括号之前出现,您将获得NoSuchElementException,并且您知道约束已失败。捕获异常并返回false。如果到达字符串的末尾并且ArrayDeque不为空(括号不是全部关闭),则返回false。否则返回true。