给定一个只包括 '(',')','{','}','[',']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
提示:
1 <= s.length <= 104
s
仅由括号 '()[]{}'
组成
c++class Solution {
public:
bool isValid(string s) {
int len=s.length();
stack<char>sk;
for(int i=0;i<len;i++){
if(sk.empty()==0){
char str=sk.top();
switch(str){
case '(':
if(s[i]==')'){
sk.pop();
break;
}
else{
sk.push(s[i]);
break;
}
case '[':
if(s[i]==']'){
sk.pop();
break;
}
else{
sk.push(s[i]);
break;
}
case '{':
if(s[i]=='}'){
sk.pop();
break;
}
else{
sk.push(s[i]);
break;
}
}
}
else{
sk.push(s[i]);
}
}
if(sk.empty()){
return true;
}
else{
return false;
}
}
};
栈是一种常见的严格限制处理顺序的线性表数据结构,遵循后进先出原则。
栈的使用场景有:
编程语言的内存管理
函数调用时的上下文管理
深度优先搜索 DFS
c++std::stack<char> st;
for (char c : s) {
if (c == '(' || c == '[' || c == '{') {
st.push(c);
} else {
if (st.empty()) return false;
char top = st.top();
if ((c == ')' && top == '(') || (c == ']' && top == '[') || (c == '}' && top == '{')) {
st.pop();
} else {
return false;
}
}
}
return st.empty();
本文作者:古月流新
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!