题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
3、注意空字符串可被认为是有效字符串。
实现思路
最直观的思路当然是使用栈
在此之前,先创建一个无序的键值对,用于记录左右括号之间的对应关系
然后遍历输入的字符串:
1、遇到左括号,push入栈
2、遇到右括号:
2.1、栈已空or栈顶元素与其不匹配:直接判定非法
2.2、栈顶元素与其匹配:将栈顶元素弹出栈
遍历结束后,再次检查栈是否已空
如果栈已空,说明括号全部匹配;否则就是非法的
代码实现(C++)
class Solution {
public:
bool isValid(string s) {
if(s==""){
return true;
}
unordered_map<char, char> pairs = {
{')', '('},
{']', '['},
{'}', '{'}
};
stack<char> stk;
for(char ch:s){
if(pairs.count(ch)>0){
if(stk.empty()==true || stk.top()!=pairs[ch]){
return false;
}else{
stk.pop();
}
}else{
stk.push(ch);
}
}
return stk.empty();
}
};