有效括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
解题思路:
因为成对的括号,存在先进左括号,后出右括号的规则,所以遇到左括号就进栈,遇到右括号就出栈并且校验,直到最后都抵消为空
整体代码如下:
class Solution20 {
public:
bool isValid(string s) {
int n = s.size();
if (n % 2 == 1) {
return false;//奇数个显然不有效
}
unordered_map<char, char> pairs = {//HASH表
{ ')', '(' },
{ ']', '[' },
{ '}', '{' }
};
stack<char> stk;//栈
for (char ch : s) {//ch是s中的第一个字符,遍历s中的所有字符串
if (pairs.count(ch)) {
if (stk.empty() || stk.top() != pairs[ch]) {
return false;
}
stk.pop();//.pop移除堆栈顶部的对象,并作为此函数的值返回该对象
}
else {
stk.push(ch);
}
}
return stk.empty();//如果栈内为空就是说已经都匹配好了,就返回1正确;
}
};
int main()
{
Solution20 validbrackets;
string s20;
//20 有效的括号
cout<< "请输入括号判断对应关系" << endl;
cin >> s20;
cout << validbrackets.isValid(s20) << endl;
system("pause");
return 0;
}