【leetcode刷題】20T14-有效的括弧

  • 2020 年 2 月 16 日
  • 筆記

木又同學2020年第14篇解題報告

leetcode第20題:有效的括弧

https://leetcode-cn.com/problems/valid-parentheses/


【題目】

給定一個只包括 '(',')','{','}','[',']' 的字元串,判斷字元串是否有效。

有效字元串需滿足:

左括弧必須用相同類型的右括弧閉合。 左括弧必須以正確的順序閉合。 注意空字元串可被認為是有效字元串。

示例 1:  輸入: "()"  輸出: true    示例 2:  輸入: "()[]{}"  輸出: true    示例 3:  輸入: "(]"  輸出: false    示例 4:  輸入: "([)]"  輸出: false    示例 5:  輸入: "{[]}"  輸出: true  

【思路】

開心~又一次寫完程式碼,一跑,全部通過

本題是棧的典型應用。遍歷字元串,如果遇到'{'、'['、'}'這三個字元,則壓棧;否則,判斷棧是否為空,同時字元與棧頂元素是否對應,若任何一個條件不滿足,則返回False。循環結束後,判斷棧是否為空,如為空,則返回True。

【程式碼】

python版本

class Solution(object):      def isValid(self, s):          """          :type s: str          :rtype: bool          """          # 奇數個,肯定不行          if len(s) % 2 != 0:              return False          # 空字元串,返回True          if s == '':              return True            d = {')': '(', ']': '[', '}': '{'}          # 使用棧來存儲          stack = []          for si in s:              # 壓棧              if si in '([{':                  stack.append(si)              # 彈棧              else:                  if len(stack) == 0 or d[si] != stack[-1]:                      return False                  stack.pop()          return len(stack) == 0  

C++版本

class Solution {  public:      bool isValid(string s) {          if (s.size() % 2 != 0)              return false;          stack<char> res;          bool flag = true;          for (auto si: s) {              if (si == '(' || si == '[' || si == '{') {                  res.push(si);              } else {                  // 棧是否為空                  if (res.size() == 0) {                      flag = false;                      break;                  }                  // 元素是否對應                  if ((res.top() == '(' && si == ')') || (res.top() == '[' && si == ']') || (res.top() == '{' && si == '}')) {                      res.pop();                  } else {                      flag = false;                      break;                  }              }          }          return flag && res.size() == 0;      }  };