zoukankan      html  css  js  c++  java
  • 20 Valid Parentheses

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

    The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

     

        题目的意思就是括号是否能正常关闭,也就是说括号要成对出现,并且要保证括号的顺序。看到括号的匹配,第一反应就是算法书中栈的一个应用场景:如果出现了左括号,则将其压进栈中,如果是右括号,则判断栈的top数据是否和该右括号对应,如果是,则出栈。这个题目,因为输入只有左右括号,也就不用去做入参检验了,降低了一点工作量。需要注意的是,最后需要判断栈是否为空,也就是判断是否所有的括号都正常关闭了。代码如下:

    class Solution {
    public:
        char getPair(char c) {
            char ret = 0;
            switch (c) {
            case ')':
                ret = '(';
                break;
            case '}':
                ret = '{';
                break;
            case ']':
                ret = '[';
                break;
            default:
                break;
            }
            return ret;
        }
    
        bool isValid(string s) {
            stack<char> st;
            for (int i = 0; i < (int)s.length(); i++) {
                char c = s[i];
                char ret = getPair(c);
                if (0 == ret) {
                    st.push(c);
                } else {
                    if (st.empty() || st.top() != ret) {
                        return false;
                    }
                    st.pop();
                }
            }
    
            return st.empty();
        }
    };

        上面的代码中,getPair方法,是获取右括号匹配的左括号,我这里就是通过switch语句直接输出,当然,也可以用vector或者map等方式,不过这个不是重点。

        提交了之后,0ms,还算不错。之后看了discussion中hot question,发现了一些除了stack之外的做法,一个是递归,另一个是动态规划,有兴趣的朋友可以思考一下。

  • 相关阅读:
    Script to Create Benchmark Procs
    自定义数据类型修改
    需求管理工具试用 – CaliberRM
    标识值重复的原因示例
    Vmware vFabric Suite开始支持自动化部署与PostgreSQL
    在ubuntu上安装Oracle Java SDK
    详解数据中心基础设施的模块化建设
    Xcode 4 无证书真机调试 环境配置
    Calculate_and_Insert_Event_Intervals_in_SQL2005_Profiler
    浏览器工作原理
  • 原文地址:https://www.cnblogs.com/styshoo/p/4657899.html
Copyright © 2011-2022 走看看