解题思路:
使用栈去实现。
遍历每个字符:
std::stack<char> s;
int size=str.size;//取字符串长度
for(int i=0;i<size;i++){
char ch=str[i];//取i的字符
}
1、如果是左括号,入栈;
case '(':
case '[':
case '{':
s.push(ch);
break;
2、如果是右括号,与栈顶元素比较(前提有栈顶元素,否则返回false),如果不匹配,,返回false;如果匹配,出栈;
case ')':
case ']':
case '}': {
if (s.empty()) {
return false;
}
char left = s.top(); s.pop();
if (!((left == '(' && ch == ')')
|| (left == '[' && ch == ']')
|| (left == '{' && ch == '}'))) {
return false;
}
break;
}
3、遍历完后,如果栈不为空,返回false。
if (!s.empty()) {
return false;
}
整体代码:
class Solution {
public:
bool isValid(string str) {
std::stack<char> s;
int size = str.size(); // 取字符串的长度
for (int i = 0; i < size; i++) {
char ch = str[i]; // 取 i 的字符
switch (ch) {
case '(':
case '[':
case '{':
s.push(ch);
break;
case ')':
case ']':
case '}': {
if (s.empty()) {
return false;
}
char left = s.top();
s.pop();
if (!((left == '(' && ch == ')')
|| (left == '[' && ch == ']')
|| (left == '{' && ch == '}'))) {
return false;
}
}
break;
}
}
}
if (!s.empty()) {
return false;
}
return true;
}
};
链接:https://leetcode-cn.com/problems/valid-parentheses/