2017-08-19 37 views
0

我寫了一個示例程序,檢查括號是否平衡。我試圖優化它,這是我可以提出的最好的。不過,我期待着能否進一步改進。我也不確定這是否是一個有效的提問。任何想法和建議如何改進檢查括號是否平衡的程序?

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中找到了完美的快速解決方案的鏈接。也許我可以在將來添加添加鏈接給他人。 –