LeetCode 20. Valid Parentheses
題目
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.
翻譯
給一個只包含'(', ')', '{', '}', '[' , ']'這些括號字元的字串,判斷這些括號是不是合法的。 右括號必須依照正確的順序出現,"()" 與 "()[]{}" 都是合法的,但"(]" 和 "([)]"就不是。
stack 先進後出
https://www.foolegg.com/introducing-the-queue-and-stack-data-structures-of-javascript/
想法
利用stack 先進後出
詳細參閱
https://skyyen999.gitbooks.io/-leetcode-with-javascript/content/questions/20md.html
https://discuss.leetcode.com/topic/79367/javascript-simple-solution
Code
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if (s.length %2 !== 0) {
        return false;
    }
    var left_temp = [];
    var lefe_parentheses = ['(', '[', '{'];
    var right_parentheses = [')', ']', '}'];
    //建立對應, 判斷用
    var match_parentheses = {
        ')' : '(',
        ']' : '[',
        '}' : '{'
    }
    for (let str of s) {
        //indexof > -1 代表有找到符合字元
        if (lefe_parentheses.indexOf(str) > -1) {
            //push  從陣列最後一位開始加入
            left_temp.push(str);
        }
        if (right_parentheses.indexOf(str) > -1) {
            //pop 陣列最後一位移除
            var right_temp = left_temp.pop();
            if (match_parentheses[str] != right_temp) {
                return false;
            }
        }
    }
    return left_temp.length === 0;
};
Run
Your input
"["
"()(){}{}"
"(({[]}))"
"([)]"
Your answer
false
true
true
false
Expected answer
false
true
true
false
Runtime: 106 ms
留言
張貼留言