我最近接受了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) –