有效的括号

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

有效字符串需满足:

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


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

示例 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();

}

 

posted @ 2020-04-24 01:18  多发Paper哈  阅读(103)  评论(0编辑  收藏  举报
Live2D