|
发表于 2023-3-12 18:59:47
|
显示全部楼层
- 思路
- 1. 从左到右遍历字符串
- 2. 如果不是括号,默认是有效字符,遍历下一个字符
- 3. 如果是左括号,左括号进入栈,遍历下一个字符
- 4. 如果是右括号 当前栈是否还有左括号 没有则匹配失败 ...
- 5. 如果出栈的字符和当前字符匹配为一对括号,遍历下一个
- 6.不匹配,则匹配失败
- 7. 遍历完毕后,判断栈中是否还有剩余左括号 没有,匹配成功
复制代码- #include <iostream>
- #include <vector>
- #include <map>
- using namespace std;
- map <char, char> bracket = { {'(', ')'}, {'{', '}'}, {'[', ']'} };
- bool isValid(string str) {
- vector <char> stack;
- for (auto c: str) {
- if (c == '(' or c == '{' or c == '[') stack.push_back(c);
- else if (c == ')' or c == '}' or c == ']') {
- if (bracket.size()) {
- if (bracket[stack.back()] != c) return false;
- else stack.pop_back();
- }
- else return false;
- }
- }
- return not stack.size();
- }
- int main(void) {
- cout << boolalpha << isValid("(a+[b-c]+d)");
- return 0;
- }
复制代码 |
|