题目传送门
思路:要知道字符串中的括号是否匹配,用栈的先进后出特性再合适不过了,遇到左括号压入栈中,遇到右括号时将栈顶元素弹出栈,栈顶元素也就是需要和右括号进行匹配的左括号,如果匹配成功则继续向下进行匹配,在匹配不成功的情况,可直接返回false提前结束程序。栈为空则表示全部括号匹配成功。
map<char,char> m={{'(',')'},{'{','}'},{'[',']'}};
class Solution {
public:
bool isValid(string s) {
stack<char> st;
if(s.size()%2) //为奇数则一定不匹配
return false;
for(int i=0;i<s.size();i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
st.push(s[i]);
else
{
if(st.empty())
return false;
char top=st.top();
st.pop();
//if(top+1!=s[i]&&top+2!=s[i]) //方法二:'('与')'的ASCII值差1,'['与']','{'与'}'的ASCII值差2
if(m[top]!=s[i])
return false;
}
}
return st.empty();
}
};