• 20. Valid Parentheses


    问题描述:

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

    An input string is valid if:

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

    Note that an empty string is also considered valid.

    Example 1:

    Input: "()"
    Output: true
    

    Example 2:

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

    Example 3:

    Input: "(]"
    Output: false
    

    Example 4:

    Input: "([)]"
    Output: false
    

    Example 5:

    Input: "{[]}"
    Output: true

    解题思路:

    1.如果要是一个合法的括号匹配,那么字符串长度必须为偶数,若为奇数,则显然不可能完成匹配

    2.空字符串为合法匹配。

    接下来可以对每一个字符进行检查:

      如果是左括号,压入栈中

      如果是右括号,检查栈是否为空,若为空说明右括号多余,不匹配。

             若不为空,则检查栈顶是否是可以与之匹配的左括号,不是也不匹配,是的话要弹出栈顶元素

    遍历完字符串后,我们得到的结论是:所有右括号都得到了合法的匹配,但是左括号不确定,所以我们要检查栈是否为空来判断是否有多余的左括号。

    代码:

    class Solution {
    public:
        bool isValid(string s) {
            if(s.size() % 2 == 1)
                return false;
            stack<char> stk;
            for(int i = 0; i < s.size(); i++){
                if(s[i] == '(' || s[i] == '[' || s[i] =='{')
                    stk.push(s[i]);
                else{
                    if(stk.empty()) return false;
                    char c = stk.top();
                    if(s[i] == ')' && c != '(') return false;
                    if(s[i] == ']' && c != '[') return false;
                    if(s[i] == '}' && c != '{') return false;
                    stk.pop();
                }
            }
            if(!stk.empty()) return false;
            return true;
        }
    };
  • 相关阅读:
    程序员面视题解析
    Forms身份验证
    梅花雨日历控件
    系统架构师学习笔记_第四章(下)
    系统架构师学习笔记_第三章
    系统架构师学习笔记_第六章(上)
    系统架构师学习笔记_第五章(下)
    系统架构师学习笔记_第一章
    系统架构师学习笔记_第四章(上)
    系统架构师学习笔记_第五章(上)
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9297461.html
Copyright © 2020-2023  润新知