LeetCode javascript解題心得 第20題 有效的括號
題目如下:
給定一個只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字串,判斷字串是否有效。
有效字串需滿足:
- 左括號必須用相同型別的右括號閉合。
- 左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 1:
輸入: "()" 輸出: true
示例 2:
輸入: "()[]{}" 輸出: true
示例 3:
輸入: "(]" 輸出: false
示例 4:
輸入: "([)]" 輸出: false
示例 5:
輸入: "{[]}" 輸出: true
解題思路:
拿到題目的第一反應就是堆疊出棧,那麼javascript是否也有相關的函式呢,去找了找,的確是有的;
var isValid = function (s) {
var stack = []; 首先我們先建立一個空的棧斷;
var len = s.length; 獲取括號字元的長度
for (var i = 0; i < len; i++) {
var char = s.charAt(i); charAt()函式是返回單個字元,i就表示第幾個,開始是0
var stackLen = stack.length;
if (stackLen == 0) stack.push(char); 如果棧空就壓入棧中
else {
if (isMatch(stack[stackLen - 1], char)) stack.pop(); 如果和棧中最後一個字元匹配,那麼出棧,isMatch函式在下面有定義
else {
if (!isValidChar(char) || stackLen > (len - i - 2)) return false; 這個地方比較經典,棧中字元超過剩餘字元直接判負,因為絕對不可能匹配了,n個棧中括號至少需要n個剩餘括號去匹配,不難理解。
stack.push(char);
}
}
}
return stack.length == 0;
};
function isMatch(char1, char2) { 括號匹配函式
if ((char1 == '(' && char2 == ')') ||
(char1 == '{' && char2 == '}') ||
(char1 == '[' && char2 == ']'))
return true;
else
return false;
}
function isValidChar(char) { 判斷符號的格式是否正確
//only '(', '{' and '[' can be pushed in
if (char == '(' || char == '{' || char == '[') return true;
else return false;
}