• 有效的括号


    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

    有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。


    注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true
    示例 2:

    输入: "()[]{}"
    输出: true
    示例 3:

    输入: "(]"
    输出: false
    示例 4:

    输入: "([)]"
    输出: false
    示例 5:

    输入: "{[]}"
    输出: true

    来源:力扣(LeetCode)

     接替思路:

      C++有链栈的包
    既然可以直接用C++中的栈包,这题就相当好写了,首先得了解链栈的基本知识,其次就是如何使用栈包。
    stack的定义:stack<typename> name;
    压栈:name.push(i);
    出栈:name.pop();因为出栈是弹出栈顶元素,所以无需传入参数
    获取栈顶元素:name.top();
    判断栈是否为空:name.empty();如果为空返回true,否则返回false
    最后就是解题的核心思想:ASCII码对应的字符,如果扩后闭合,即对应的ASCII码相邻1或2;否则不闭合

     

    代码1:

    class Solution {
    public:
        bool isValid(string s) {
            stack<char> linkstack;
            int length=s.size();
            if(length==0)
                return true;
            if(length%2)
                return false;
            linkstack.push(s[0]);
            for(int i=1;i<length;i++){
                if(linkstack.empty())
                    linkstack.push(s[i]);
                else if(s[i]-linkstack.top()==1||s[i]-linkstack.top()==2)
                    linkstack.pop();
                else
                    linkstack.push(s[i]);
            }
            return linkstack.empty(); 
        }
    };

     

     

     

     

    代码2:

    #include<iostream>
    #include<stack>
    #include<cstring>
    using namespace std;
    char arr[2000][1];
    stack<char>st;
    
    string validCheck(){
        arr[')'][0]='(',arr['}'][0]='{',arr[']'][0]='[';
        string str;
        cin>>str;
        int i=0;
        char ch;
        while (str[i])
        {
            ch = str[i++];
            if (ch=='('||ch=='['||ch=='{')
            {
                st.push(ch);
            }else 
            {
    
                if (arr[ch][0]==st.top()){
                    st.pop();
                }else if(st.empty()){
                    return "false";
                }
            }
        }
        if (!st.empty())
        {
            return "false";
        }
        return "true";
    
    }
    int main(){
            cout<<validCheck();
    
    }

     

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/12764933.html

  • 相关阅读:
    java+selenium 3.x的火狐自动化测试环境
    Jmeter+badboy环境搭建
    Linux环境下搭建Tomcat+mysql+jdk环境
    线程池的配置说明
    关于事务的使用规范
    生产事故 java.lang.OutOfMemoryError: GC overhead limit exceeded
    linux检查网络运行情况命令
    百万数据迁移的线程分组
    XML报文拼接 乱码
    创建数据源、连接数据库
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/12764933.html
Copyright © 2020-2023  润新知