用于检查括号是否平衡的Scala代码

时间:2015-08-31 00:11:14

标签: algorithm scala

我正在编写一个scala函数来检查平衡的括号。因此Scala Library均衡,但"()","([]{})"不均衡

下面是我写的应该正常工作的代码。我不知道为什么它对我尝试的所有输入都说错了。

")","(){[}]"

3 个答案:

答案 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