2017-08-19 14 views
0

括弧が均衡しているかどうかをチェックするサンプルプログラムを書いています。私はそれを最適化しようとした、これは私が思い付くことができる最高です。しかし私はこれをさらに改善できるかどうか探しています。私はこれがstackoverflowに置く有効な質問かどうかもわかりません。任意の考えと提案括弧がバランスしているかどうかを確認するプログラムを改善するにはどうすればよいですか?

func checkBalancedParenthesis(parenthesis: String) -> (Bool,String) { 

    var stack = Stack<Character>() 

    for character in parenthesis.characters { 

     guard let check = try? checkValidPattern(a: ("!",character)) else { 

      return (false,"Pattern is not valid") 
     } 

     if let elem = stack.top, try! checkValidPattern(a: (elem,character)) { 

      stack.pop() 

     } 
     else { 
      stack.push(item: character) 
     } 
    } 

    return (stack.isEmpty,stack.isEmpty ? "Balanced": "Un-Balanced") 

} 


func checkValidPattern(a: (Character,Character)) throws -> Bool { 
    let validList: [Character] = ["(",")","[","]","}","{","<",">"] 

    switch a 
    { 
    case ("(",")"): 
     return true 
    case ("[","]"): 
     return true 
    case ("{","}"): 
     return true 
    case ("<",">"): 
     return true 
    case let (_,char) where validList.contains(char) == true: 
      return false 
    default: 
     throw InvalidPattern.chracterNotValid 
    } 
} 
+0

「かっこがバランスしている場合」とはどういう意味ですか?括弧は単数名詞です。 –

+1

あなたのプログラムが意図したとおりに動作し、レビューと改善が必要な場合は、codereview.stackexchange.comが適切なサイトです。 –

+0

また、https://codereview.stackexchange.com/questions/136514/swift-hackerrank-balanced-bracketsを比較してください。 –

答えて

0

私は実際に必要なものを手に入れます。シーケンス内の各文字を確認するループをforとして使用できます。すべての開始括弧を新しい配列に追加します。閉じたブラケットごとに、新しい配列の最後のブラケットが閉じブラケットに対応する開きブラケットであるかどうかを確認してから、開きブラケットを取り外します。配列の最後までこれを保持し、配列が空であるかどうかを確認します。型の安全のために角括弧を列挙します。コードレビューhereで、このリンクでさらにコードを確認できます。

+0

'[{]}'がアンバランスであると検出するには、カウントでは不十分です。 –

+0

はい、あなたは正しいです。これ以上のものが必要です。私もcodereviewで完璧な迅速なソリューションのためのリンクを発見しました。たぶん、他の人のためのリンクを将来追加することができます。 –

関連する問題