LeetCode 第 20 號問題:有效的括號

本文首發於公衆號「五分鐘學算法」,是圖解 LeetCode 系列文章之一。git

我的網站:www.cxyxiaowu.comgithub

題目來源於 LeetCode 上第 20 號問題:有效的括號。題目難度爲 Easy,目前經過率爲 37.8% 。算法

題目描述

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

有效字符串需知足:動畫

  1. 左括號必須用相同類型的右括號閉合。
  2. 左括號必須以正確的順序閉合。

注意空字符串可被認爲是有效字符串。網站

示例 1:ui

輸入: "()"
輸出: true
複製代碼

示例 2:spa

輸入: "()[]{}"
輸出: true
複製代碼

示例 3:code

輸入: "(]"
輸出: false
複製代碼

示例 4:cdn

輸入: "([)]"
輸出: false
複製代碼

示例 5:

輸入: "{[]}"
輸出: true
複製代碼

題目解析

這道題讓咱們驗證輸入的字符串是否爲括號字符串,包括大括號,中括號和小括號。

這裏咱們使用

  • 遍歷輸入字符串
  • 若是當前字符爲左半邊括號時,則將其壓入棧中
  • 若是遇到右半邊括號時,分類討論:
  • 1)如棧不爲空且爲對應的左半邊括號,則取出棧頂元素,繼續循環
  • 2)若此時棧爲空,則直接返回false
  • 3)若不爲對應的左半邊括號,反之返回false

動畫描述

代碼實現

class Solution {
public:
    bool isValid(string s) {

        stack<char> stack;
        for( int i = 0 ; i < s.size() ; i ++ )
            if( s[i] == '(' || s[i] == '{' || s[i] == '[')
                stack.push(s[i]);
            else{

                if( stack.size() == 0 )
                    return false;

                char c = stack.top();
                stack.pop();

                char match;
                if( s[i] == ')' ){
                    match = '(';
                }
                else if( s[i] == ']' ){
                    match = '[';
                }
                else{
                    match = '{';
                }

                if(c != match)  return false;
            }

        if( stack.size() != 0 )
            return false;

        return true;
    }
};
複製代碼

相關文章
相關標籤/搜索