classSolution{public:intfind(string& s){int sum =0, res =0;for(int i =0, start =0; i < s.size(); i ++){if(s[i]=='(') sum ++;else{
sum --;if(sum ==0) res =max(res, i-start+1);elseif(sum <0) start = i +1, sum =0;}}return res;}intlongestValidParentheses(string s){stringre(s.rbegin(), s.rend());for(auto& r: re) r ^=1;
cout << re << endl;//从左到右找一遍,从右到左找一遍int res =max(find(s),find(re));return res;}};
classMinStack{public:/** initialize your data structure here. */
stack<int> stk, stk_min;MinStack(){}voidpush(int x){
stk.push(x);if(stk_min.empty()) stk_min.push(x);else stk_min.push(min(stk_min.top(), x));}voidpop(){
stk.pop();
stk_min.pop();}inttop(){return stk.top();}intgetMin(){return stk_min.top();}};/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/