7.28 20. 有效的括號
給定一個只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判斷字符串是否有效。
有效字符串需滿足:
- 左括號必須用相同類型的右括號閉合。
- 左括號必須以正確的順序閉合。
- 每個右括號都有一個對應的相同類型的左括號。
我的思路:
長度必須為偶數,不是返回false
數組當作棧,確保每一個右括號都對應一個左括號
如果mp沒有c的話->左括號,直接push
如果st長度為0,或者棧頂不為對應的括號->返回false
我的代碼:
var isValid = function(s) {if(s.length % 2 === 1){return false;}const st = [];const mp = {')' : '(' , ']':'[' , '}' : '{'};for(let c of s){if(!mp.hasOwnProperty(c)){// c是左括號st.push(c);}else if(st.length === 0 || st.pop() !== mp[c]){return false;}}return st.length === 0;
};
總結:這個函數用棧和哈希表來檢查括號字符串是否有效。先檢查長度是否為奇數,如果是直接返回false。然后遍歷字符串,遇到左括號就壓棧,遇到右括號就檢查棧頂是否匹配,不匹配或棧空就返回false。最后檢查棧是否為空,空則有效。