【LeetCode】20. Valid Parentheses
难点:优先级,最后开的bracket要最先合
思路:利用stack的“后进先出”原理
不过有个奇怪的点就是 “stack isvalid; ”如果放在isValid( )函数里定义编辑器会显示找不到。
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<String>
#include<stack>
using namespace std;
stack<int> isvalid;//这里栈的定义如果是在isValid()里面定义,会显示找不到,不理解
bool isValid(string s) {
bool BOOL = true;
/* isvalid[]:判断brackets是否完整 */
for (char c : s) {
switch (c) {
case '(': isvalid.push(0); continue;
case ')': if (!isvalid.empty() && isvalid.top() == 0) { isvalid.pop(); continue; }
else return false;
case '[': isvalid.push(1); continue;
case ']': if (!isvalid.empty() && isvalid.top() == 1) { isvalid.pop(); continue; }
else return false;
case '{': isvalid.push(2); continue;
case '}': if (!isvalid.empty() && isvalid.top() == 2) { isvalid.pop(); continue; }
else return false;
}
}
BOOL = (isvalid.empty()) ? true : false;
return BOOL;
}
int main() {
#ifdef ONLINE_JUDGE
#else
freopen("D:/in.txt", "r", stdin);
#endif
string cin_s;
cin >> cin_s;
bool BOOL = isValid(cin_s);
cout << BOOL << endl;
return 0;
}