iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0
自我挑戰組

用LeetCode來訓練大腦的邏輯思維系列 第 7

LeetCode 20. Valid Parentheses

  • 分享至 

  • xImage
  •  

題目

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets.
Open brackets must be closed in the correct order.

題意

給定符號(, ), {, }, [ 以及 ]

通過驗證的條件:

  1. 右括號需對應到相同類型的左括號
  2. 右括號對應的順序需正確

Example 1:

Input: s = "()"
Output: true

Example 2:

Input: s = "()[]{}"
Output: true

Example 3:

Input: s = "(]"
Output: false

Example 4:

Input: s = "([)]"
Output: false

Example 5:

Input: s = "{[]}"
Output: true

解題步驟

可使用堆疊(stack)後進先出Last in, first out (LIFO)的概念,遇到左括號先放入stack,遇到右括號
就從stack的最後一個開始比對。

宣告左右括號陣列:

let left = ['(', '[', '{'];
let right = [')', ']', '}'];

宣告匹配的物件,比對之用:

let match = {
    ')': '(',
    ']': '[',
    '}': '{'
}

遇到左括號,放入stack:

if (left.indexOf(s[i]) > -1) {
    stack.push(s[i]);
}

遇到右括號,從stack最後一個取出配對:

if (right.indexOf(s[i]) > -1) {
    let stackStr = stack.pop();
    if (match[s[i]] != stackStr) {
        return false;
    }
}

Solution

let isValid = function (s) {
  if (!s) return true;

  let stack = [];

  let left = ['(', '[', '{'];
  let right = [')', ']', '}'];
  let match = {
    ')': '(',
    ']': '[',
    '}': '{'
  }

  for (let i in s) {
    if (left.indexOf(s[i]) > -1) {
      stack.push(s[i]);
    }

    if (right.indexOf(s[i]) > -1) {
      let stackStr = stack.pop();
      if (match[s[i]] != stackStr) {
        return false;
      }
    }
  }
  return stack.length == 0;
};

上一篇
LeetCode 15. 3Sum
下一篇
LeetCode 26. Remove Duplicates from Sorted Array
系列文
用LeetCode來訓練大腦的邏輯思維30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言