本文参考代码随想录
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
利用栈来实现。每遇到一个左括号则把对应右括号压入栈中,遇到右括号时检查栈顶和该右括号是否一致。
如果遍历完字符串栈不为空,说明有多余的左括号;如果遍历过程中栈已经为空,说明多余的右括号;遍历过程中发现字符不匹配
class Solution {
public:
bool isValid(string s) {
if(s.size() % 2 != 0) return false;
stack<char> st;
for(int i = 0;i < s.size();i++){
if(s[i] == '(') st.push(')');
else if(s[i] == '{') st.push('}');
else if(s[i] == '[') st.push(']');
else if(st.empty() || st.top() != s[i]) return false;
else st.pop();
}
return st.empty();
}
};
时间复杂度、空间复杂度:O(n)