給定乙個只包括 『(』,』)』,』』,』[』,』]』 的字串 s ,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
示例 1:
輸入:s = 「()」
輸出:true
示例 2:
輸入:s = 「(){}」
輸出:true
示例 3:
輸入:s = 「(]」
輸出:false
示例 4:
輸入:s = 「([)]」
輸出:false
示例 5:
輸入:s = 「」
輸出:true
1 <= s.length <= 104
s 僅由括號 『(){}』 組成
解題關鍵:
只有右括號左邊的第乙個位置存在配對的左括號才是正確的。
思路:括號匹配的題一般用棧這個結構,所以先掃瞄序列,遇到左括號就入棧,再根據情況將序列元素出棧。分析解題關鍵,首先右括號左邊的位置肯定要存在,所以遇到右括號時,首先要判定棧是否空,若棧空,則序列錯誤。其次這個位置上的括號一定是和右括號配對的,所以要檢查棧頂是否配對,若不配對,則序列也錯誤。
演算法可優化的地方:
1.序列長度為奇數一定錯誤,所以要先判定序列長度,若為奇數則返回假。
2.由於存在多種括號,所以用map容器儲存三對括號,key為右括號,value為左括號。入棧時用map容器的count函式檢測當前符號,若不為右括號則入棧,若是右括號則根據key得到value進行判定。
偽**:
class
solution
}return stk.
empty()
;}}
class
solution,,
','}
;for
(char ch:s)
else
stk.
push_back
(ch);}
return stk.
empty()
;}};
力扣 20 有效的括號
題目 給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例1 輸入 輸出 true 示例2 輸入 輸出 true 示例3 輸入 輸出 false 示例4 輸入 輸出 false 示例5 輸入 輸出 ...
力扣 20 有效的括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...
有效的括號(力扣 20)
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...