• 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;
        }
    };
  • 相关阅读:
    寫程序方法
    phpDesigner注冊碼
    如何获取SQL Server数据库元数据(转)
    WPF中的事件(Event)
    访问数据源的架构信息(系统表、信息结构图、GetSchema)
    MSbuild生成WPF程序
    数据契约
    window动态调整大小后无法关闭
    sql server 2000 系统表详细介绍(转,收藏一下)
    Linq2Sql:使用Sqlmetal.exe
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9297461.html
Copyright © 2020-2023  润新知