Leetcode 20 -- 有效的括號

題目鏈接如下:Leetcode 20


大致描述一下題目:

給定一個字符串,只有'(' , ')' , '[', ']' , '{' , '}' 這六個字符,判斷是否是有效字符串。

要求如下:

1. 左括號必須與對應的右括號閉合

2. 左括號以正確的順序閉合

3.字符串算有效字符串


解題思路:

老套路沒啥好說的,用棧處理,類似於Leetcode的第九題 迴文數。

注意一些特殊的情況,比如字符串長度是奇數,首字符是右括號肯定不是有效字符串


附上代碼如下(C++):

/*******************************************************************************
Copyright © 2018-20xx Qiao Chuncheng, All Rights Reserved.
File name:		020[有效的括號].cpp
Author:			Qiao Chuncheng
Version:		v1.0
Date:			2018-04-11
*******************************************************************************/
class Solution {
public:
    bool isValid(string s) {
        bool flag = true;
        if (s.size() == 0)
            return true; //閱讀題目要求後發現空字符串爲有效字符串
        if (s.size() % 2 != 0)
            return false;
        if (s[0] == ')' || s[0] == ']' || s[0] == '}')
            return false;

        stack<char> strStack;
        for (size_t i = 0; i < s.size(); i++)
        {
            if (s[i] == '(' || s[i] == '[' || s[i] == '{')
                strStack.push(s[i]);
            else if (s[i] == ')') {
                if (strStack.top() != '(')
                    return false;
                strStack.pop();
            }
            else if (s[i] == ']') {
                if (strStack.top() != '[')
                    return false;
                strStack.pop();
            }
            else if (s[i] == '}') {
                if (strStack.top() != '{')
                    return false;
                strStack.pop();
            }
        }
        return strStack.empty();
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章