所以我正在努力学习Java,而且我被困在一项任务上。该任务要求类似于字符串是否平衡的东西,有一个奇怪的扭曲。如果所有左括号在闭括号之前先出现,它只能返回true。
是的:
((()))
(())
()
题:
()()
(())()
我已经编码只是一个正常的“检查是否平衡”但我不明白如何添加这个小扭曲。我真的只是掌握了基础知识,所以我并不真正理解像数组这样的东西,非常感谢帮助。
答案 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。