给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
class Solution {
public:
bool isValid(string s) {
unordered_map<char,int> res{{'(',1},{'[',2},{'{',3},{')',4},{']',5},{'}',6}};
stack<char> m;
bool ans=true;
for(char i:s)
{
// 说明是开括号
if(res[i]<=3)
m.push(i);
//如果不为空(说明有开括号),且遇到对应的闭括号
else if(!m.empty()&&res[m.top()]==res[i]-3)
m.pop();
else
{
ans=false;
return ans;
}
}
//如果栈不为空,证明有多余的开括号
if(!m.empty())
ans=false;
return ans;
}
};
复杂度分析
时间复杂度:O(N)。遍历了一遍字符串。
空间复杂度:O(N)。最坏情况下,假如输入是 (((((((,栈的大小将是输入字符串的长度。