给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
来源:力扣(LeetCode)
方法一:栈,当右括号遇到栈顶为同类型左括号,出栈,否则入栈
class Solution {
public:
bool isValid(string s) {
stack<char> st;
unordered_map <char,char> m;
m[')']='(';
m['}']='{';
m[']']='[';
int i;
st.push(s[0]);
if(s.length()%2==1) return false;
for(i=1;i<s.length();i++){
if(st.empty()) st.push(s[i]);
else{
if(m[s[i]]==st.top()) st.pop();
else st.push(s[i]);
}
}
if(st.empty()) return true;
else return false;
}
};