验证括号序列,圧栈弹栈比较即可
提交时报runtime error 检查发现27行的st.empty()写成了s.empty(),看来在有s表示字符串的情况下,用st表示栈真不妙。
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <stack>
#include <iostream>
#include <iomanip>
using namespace std;
/*
https://oj.leetcode.com/problems/valid-parentheses/
Given a string containing just the characters
'(', ')', '{', '}', '[' and ']',
determine if the input string is valid.
The brackets must close in the correct order,
"()" and "()[]{}" are all valid
but "(]" and "([)]" are not.
*/
class Solution {
public:
bool isValid(string s) {
std::stack<char> st;
for (size_t i=0;i!=s.size();++i){
if (st.empty()){
st.push(s[i]);
continue;
}
switch(s[i]){
case ')':{
if (st.top()=='(')
st.pop();
else
st.push(s[i]);
break;
}
case ']':{
if (st.top()=='[')
st.pop();
else
st.push(s[i]);
break;
}
case '}':{
if (st.top()=='{')
st.pop();
else
st.push(s[i]);
break;
}
default:{
st.push(s[i]);
}
}
}
return st.empty()?true:false;
}
};
int main(){
Solution sol;
string cmd;
while (cin>>cmd){
cout<<"input:"<<cmd<<" "<<boolalpha<<sol.isValid(cmd)<<endl;
}
system("pause");
return 0;
}