普通版本(辅助栈 + 哈希表)
cpp
class Solution {
public:
bool isValid(string s) {
unordered_map<char,int> m{{'(',1},{'[',2},{'{',3},
{')',4},{']',5},{'}',6}};//使用哈希表将左右括号与数字关联,便于后续使用
stack<char> st;
bool istrue=true;//
for(char c:s)
{
int flag=m[c];//获取字符串s的某个字符对应的数字
if(flag>=1&&flag<=3)//如果是左括号就将其入栈
{
st.push(c);
}
else if (!st.empty() && m[st.top()] == flag-3)//如果当前栈不为空,且当前字符是栈顶元素对应的右括号,就将栈顶元素出栈
{//不为空empty()返回false,为空返回true
st.pop();
}
else
{
istrue=false;
break;
}
}
if(!st.empty()) //循环结束后栈不为空,就表示括号没有消完,所以该字符串s无效
{
istrue=false;
}
return istrue;
}
};
时间复杂度:O(N)
空间复杂度:O(N)(最坏情况下字符串s全是左括号没有右括号,此时栈的长度就是字符串s的长度)
优化版本(待补充)
~over~