我最近接受了scala的访问。问题是要解决给定的字符串是否有平衡括号。例如,“(({({}])”是平衡的,其中“((({)}))”不是。在scala中使用可变栈的平衡括号算法
我在下面提供的解决方案 -
object BalancedBrackets {
def main(a: Array[String]): Unit = {
println(balancedBrackets("((()))"))
}
def balancedBrackets(s: String): Boolean = {
import scala.collection.mutable.Stack
import scala.util.control.Breaks._
var brackets = Stack[Char]()
try {
for (c <- s) {
println(c)
c match {
case '(' | '{' | '[' => brackets.push(c)
case ')' => var c1 = brackets.pop; if (c1 != '(') {
break
}
case '}' => var c1 = brackets.pop; if (c1 != '{') {
break
}
case ']' => var c1 = brackets.pop; if (c1 != '[') {
break
}
}
}
if (brackets.size == 0) true else false
} catch {
case ex: Exception => println("Exception"); ex.printStackTrace(); false
}
}
}
但记者问到用一成不变的堆栈,而不是作为可变可变不是线程安全的,如预期在多线程环境将无法正常工作。
我不知道如何在scala中使用不可变堆栈实现相同的算法。任何人都可以帮助我。
参见此:http://stackoverflow.com/a/10941738/5599298 – slouc
下面是解:http://stackoverflow.com/a/12556621/4496364 –
的[算法可能的复制转换为Scala的,看不出为什么它不起作用](http://stackoverflow.com/questions/12555162/algorithm-converted-to-scala-cant-see-why-it-doesnt-work) –