我正在编写一个scala函数来检查平衡的括号。因此Scala Library
均衡,但"()","([]{})"
不均衡
下面是我写的应该正常工作的代码。我不知道为什么它对我尝试的所有输入都说错了。
")","(){[}]"
答案 0 :(得分:2)
HashMap
' get
方法返回Option
,因此您的测试需要更改为:
if( brace.get(stack.pop) != Some(ch) ) return false
或:
if( brace.get(stack.pop).contains(ch) ) return false
答案 1 :(得分:0)
package com.java.run;
public class Traversetwoside {
public static void main(String[] args) {
String s = "{<()>}";
boolean istrue = true;
int i, j = 0;
for (i = 0, j = s.length() - 1; i <= j; i++, j--) {
// a=s.charAt(i);
if (s.charAt(i) == '{') {
if (s.charAt(j) != '}') {
istrue = false;
System.out.println("istrue =false");
break;
}
}
else if (s.charAt(i) == '<') {
if (s.charAt(j) != '>') {
istrue = false;
System.out.println("istrue =false");
break;
}
}
else if (s.charAt(i) == '(') {
if (s.charAt(j) != ')') {
istrue = false;
System.out.println("istrue =false");
break;
}
}
istrue =true;
System.out.println("istrue =true");
}
}
}
答案 2 :(得分:0)
如果可以使用不可变结构进行递归,为什么要使用堆栈。
def isBalanced(values: String): Boolean = {
// If you would like to add or remove braces that need validation,
// just change balanceMap
val balanceMap = Map(
')' -> '(',
'}' -> '{',
']' -> '['
)
val closedBraces = balanceMap.keys.toSeq
val openBraces = balanceMap.values.toSeq
@tailrec
def isBalancedRec(parsed: Seq[Char], input: Seq[Char]): Boolean = {
if (input.isEmpty) {
if (parsed.isEmpty) {
true
} else {
false
}
} else {
input.head match {
case in if openBraces.contains(in) =>
isBalancedRec(in +: parsed, input.tail)
case in if closedBraces.contains(in) =>
if (parsed.isEmpty) {
false
} else if (parsed.head == balanceMap(in)) {
isBalancedRec(parsed.tail, input.tail)
} else {
false
}
case _ => false
}
}
}
isBalancedRec(Nil, values.toCharArray)
}
测试用例:
isBalanced("())") // false
isBalanced("(){}[]") // true
isBalanced("{(})") // false
isBalanced("{([])}") // true
isBalanced("") // true