• 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.

    括号匹配的问题,使用栈解决。(注意,访问栈元素时要先判断栈是否为空)

    C++实现代码如下:

    #include<iostream>
    #include<string>
    #include<stack>
    using namespace std;
    
    class Solution {
    public:
        bool isValid(string s) {
            size_t index=0;
            stack<char> ss;
            while(index<s.length())
            {
                char c;
                switch(s[index])
                {
                case '(' :
                case '[' :
                case '{' :
                    ss.push(s[index]);
                    break;
                case ')' :
                    if(ss.empty())
                        return false;
                    c=ss.top();
                    if(c!='(')
                        return false;
                    ss.pop();
                    break;
                case ']' :
                    if(ss.empty())
                        return false;
                    c=ss.top();
                    if(c!='[')
                        return false;
                    ss.pop();
                    break;
                case '}' :
                    if(ss.empty())
                        return false;
                    c=ss.top();
                    if(c!='{')
                        return false;
                    ss.pop();
                    break;
                default:
                    return false;
                }
                index++;
            }
            if(index==s.length()&&ss.empty())
                return true;
            return false;
        }
    };
    
    int main()
    {
        string str="]";
        Solution s;
        cout<<s.isValid(str)<<endl;
    }

    运行结果:

    #include<string>
    #include<iostream>
    #include<stack>
    using namespace std;
    
    class Solution
    {
    public:
        bool isValid(string s)
        {
            stack<char> st;
            int i;
            for(i=0;i<(int)s.size();i++)
            {
                switch(s[i])
                {
                case '(':
                case '[':
                case '{':
                    st.push(s[i]);
                    break;
                case ')':
                    if(st.empty()||st.top()!='(')
                        return false;
                    st.pop();
                    break;
                case ']':
                    if(st.empty()||st.top()!='[')
                        return false;
                    st.pop();
                    break;
                case '}':
                    if(st.empty()||st.top()!='{')
                        return false;
                    st.pop();
                    break;
                }
            }
            if(st.empty())
                return true;
            else
                return false;
        }
    };
    
    
    int main()
    {
        Solution s;
        string str="((()))";
        cout<<s.isValid(str)<<endl;
    }
    

      

  • 相关阅读:
    BrowserSync,自动刷新,解放F5,去掉更新提示
    js获取手机系统语言
    块元素,行内元素,行内块区别
    原生js判断某个元素是否有指定的class名的几种方法
    如何实现调用console.log(‘good’.repeat(3))时输出goodgoodgood?
    数组如何去除重复数据,只保留一条
    Sentinel笔记-Flow流控规则
    sentinel笔记 NodeSelectorSlot,ClusterBuilderSlot
    Sentinel笔记--Slotchain
    Sentinel笔记-核心类
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4098102.html
Copyright © 2020-2023  润新知