題目描述
給定一個只包括 '(',')'脯燃,'{'搂妻,'}','['辕棚,']' 的字符串欲主,判斷字符串是否有效。
有效字符串需滿足:
左括號必須用相同類型的右括號閉合逝嚎。
左括號必須以正確的順序閉合扁瓢。
注意空字符串可被認為是有效字符串
示例
輸入: "()"
輸出: true
輸入: "()[]{}"
輸出: true
輸入: "(]"
輸出: false
輸入: "([)]"
輸出: false
輸入: "{[]}"
輸出: true
思路
遇到左括號進行入棧,遇到右括號判斷棧頂元素是否與當前字符匹配补君,如果匹配則出棧引几,否則返回false
,最后檢查棧是否為空赚哗,如果為空說明完全匹配她紫,返回true
,否則返回false
屿储。JavaScript實現(xiàn)利用數組的push
和pop
方法實現(xiàn)元素的入棧和出棧。
實現(xiàn)代碼
var isValid = function(s) {
var sub = [];
var len = s.length;
for (var i = 0; i < len; i++) {
if (s[i] === '(' || s[i] === '[' || s[i] === '{') { //遇到左括號添加進數組
sub.push(s[i]);
} else if (s[i] === ')') {
if (sub[sub.length - 1] === '(') { //遇到右括號判斷數組最后一個元素是否與當前元素匹配
sub.pop(); //匹配則刪除數組最后一個元素
} else {
return false; //否則返回false
}
} else if (s[i] === ']') {
if (sub[sub.length - 1] === '[') {
sub.pop();
} else {
return false;
}
} else {
if (sub[sub.length - 1] === '{') {
sub.pop();
} else {
return false;
}
}
}
if (sub.length == 0) return true;
else return false;
};
var result = isValid('()');