给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
代码
class Solution {
public:
bool isValid(string s) {
stack<char>st;
for (auto c:s) {
if (c == '(') {//若检测到(,则将对应的)入栈
st.push(')');
}else if (c == '[') {
st.push(']');
} else if (c == '{') {
st.push('}');
} else if ((!st.empty()) && (st.top() == c)) {//遇到右括号,则将栈顶相同的右括号出栈,否则不匹配,直接返false
st.pop();
} else {
return false;
}
}
return (st.empty()) ? true : false;
}
};
知识
1、stack的定义
【头文件】
#include<stack>
using namespace;
定义方法与其他容器相同,typename可以任意基本类型数据类型或容器
stack<typename> name;
2、stack容器内元素的访问
由于栈(stack)本身就是一种后进先出的数据结构
stack中只能通过top()来访问栈顶元素
3、stack常用函数
①push()
入栈
②top()
获得栈顶元素
③pop()
弹出栈顶元素
④empty()
可以检测stack内是否为空,返回true为空,返回false为非空
⑥size()
返回stack内元素的个数