标签:类型 push 思路 ret pac 如何 asc 是否有效 cin
给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 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(); }
标签:类型 push 思路 ret pac 如何 asc 是否有效 cin
原文地址:https://www.cnblogs.com/BlairGrowing/p/12764933.html