LeetCode之有效的括號(hào)
前言
我們社區(qū)陸續(xù)會(huì)將顧毅(Netflix 增長(zhǎng)黑客,《iOS 面試之道》作者,ACE 職業(yè)健身教練。微博:@故胤道長(zhǎng)[1])的 Swift 算法題題解整理為文字版以方便大家學(xué)習(xí)與閱讀。
LeetCode 算法到目前我們已經(jīng)更新了 19 期,我們會(huì)保持更新時(shí)間和進(jìn)度(周一、周三、周五早上 9:00 發(fā)布),每期的內(nèi)容不多,我們希望大家可以在上班路上閱讀,長(zhǎng)久積累會(huì)有很大提升。
不積跬步,無以至千里;不積小流,無以成江海,Swift社區(qū) 伴你前行。
難度水平:簡(jiǎn)單
1. 描述
給定一個(gè)只包括 '(',')','{','}','[',']' 的字符串 s ,判斷字符串是否有效。
有效字符串需滿足:
左括號(hào)必須用相同類型的右括號(hào)閉合。
左括號(hào)必須以正確的順序閉合。
2. 示例
示例 1
輸入:s = "()"
輸出:true
示例 2
輸入:s = "()[]{}"
輸出:true
示例 3
輸入:s = "(]"
輸出:false
示例 4
輸入:s = "([)]"
輸出:false
示例 5
輸入:s = "{[]}"
輸出:true
約束條件:
- 1 <= s.length <= 104
- s 僅由括號(hào) '()[]{}' 組成
3. 答案
class ValidParentheses {
func isValid(_ s: String) -> Bool {
var stack = [Character]()
for char in s {
if char == "(" || char == "[" || char == "{" {
stack.append(char)
} else if char == ")" {
guard stack.count != 0 && stack.removeLast() == "(" else {
return false
}
} else if char == "]" {
guard stack.count != 0 && stack.removeLast() == "[" else {
return false
}
} else if char == "}" {
guard stack.count != 0 && stack.removeLast() == "{" else {
return false
}
}
}
return stack.isEmpty
}
}
- 主要思想:使用堆棧查看 peek 左大括號(hào)是否對(duì)應(yīng)于當(dāng)前右大括號(hào)。
- 時(shí)間復(fù)雜度:O(n)
- 空間復(fù)雜度:O(n)
該算法題解的倉(cāng)庫(kù):LeetCode-Swift[2]
點(diǎn)擊前往 LeetCode[3] 練習(xí)
參考資料
[1] @故胤道長(zhǎng): https://m.weibo.cn/u/1827884772
[2] LeetCode-Swift: https://github.com/soapyigu/LeetCode-Swift
[3] LeetCode: https://leetcode.com/problems/valid-parentheses