-2

所以我正在尝试学习 Java,但我被困在一个任务上。该作业要求类似于弦是否平衡,带有奇怪的扭曲。只有当所有开括号都在闭括号之前,它才能返回真。

真的:

((()))

(())

()

错误的:

()()

(())()

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

4

3 回答 3

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");
       }
   }

这仅适用于您所说的扭曲。您可能希望将正则表达式用于这样的事情。

于 2016-01-19T01:38:28.593 回答
0

您可以使用 Java 模式匹配!

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 模式中的构造,您只希望它们是字符串中的普通字符。

于 2016-01-19T01:39:08.720 回答
0

使用 ArrayDeque。

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

于 2016-01-19T01:43:52.090 回答