有效括号序列
思路:
由于需要进行括号匹配,由于对于最晚的进入的待匹配的括号是最早进行匹配的,所以符合后入先出的结构,所以用一个栈进行辅助
图解:
链接
代码:
class Solution {
public:
//由于需要进行括号匹配,由于对于最晚的进入的待匹配的括号是最早进行匹配的
//所以符合后入先出的结构,所以用一个栈进行辅助
bool isValid(string s) {
stack<char>s1;
//遍历字符串,只要遇到左括号,就将其对应的右括号压入栈中,等待匹配
//之后如果遇到右括号,就进行判断是否与栈顶元素一致,如果一致就表示
//能进行匹配,再将栈顶的这个已经匹配的括号出栈
//如果匹配的时候发现栈是空的,就表明没有对应的括号进行匹配,返回false
for(int i=0;i<s.length();i++){
if(s[i]=='('){
s1.push(')');
}else if(s[i]=='{'){
s1.push('}');
}else if(s[i]=='['){
s1.push(']');
}else if(s1.empty()){
return false;
}else if(s1.top()==s[i]){
s1.pop();
}
}
//最后如果字符串是合法的,就一定能够完全匹配,最后栈为空,则表示合法的串
return s1.empty();
}
};