【leetcode】Longest Valid Parentheses
2015-07-11 10:56
246 查看
#include<iostream> #include<stack> #include<vector> #include<string> #include<algorithm> using namespace std; struct Node { int key; char c; Node(int key,char c):key(key),c(c){}; }; class Solution1 { public: int fun(string s) { stack<Node*>result; int i=0; vector<int>arr; while(i<s.size()) { Node *node=new Node(i,s[i]); if(!result.empty()) { char temp=result.top()->c; if(juge(temp,s[i])) { arr.push_back(result.top()->key); arr.push_back(i); result.pop(); } else result.push(node); } else result.push(node); i++; } /*while(!result.empty()) { cout<<result.top()->key<<' '<<result.top()->c<<endl; result.pop(); }*/ sort(arr.begin(),arr.end()); for(auto it=arr.begin();it!=arr.end();it++) cout<<*it<<endl; cout<<"*****"<<endl; int max=1; int max_id=0; for(vector<int>::iterator i=arr.begin();i!=arr.end();i++) { auto j=i+1; auto t=i; int count=1; for(;j!=arr.end();j++) { cout<<*j<<endl; cout<<*t<<endl; if(1!=((*j)-(*t))) break; else { count++; } t=j; }cout<<"HHH"<<endl; if(max<count) { max=count; max_id=*(j-1)-max+1; } if(j==arr.end()) break; i=j-1; } return max; } bool juge(char a,char b) { if(a=='('&&b==')'||a=='['&&b==']'||a=='{'&&b=='}') return true; else return false; } }; class Solution2 { public: int fun(string s) { stack<int>result; for(int i=0;i<s.size();i++) { if(s[i]=='(') result.push(i); else if(!result.empty()) { s[result.top()]='$'; s[i]='$'; result.pop(); } } int length=0; int max=0; for(int i=0;i<s.size();i++) { if(s[i]=='$') { length++; if(max<length) max=length; } else length=0; } return max; } }; class Solution3 { public: int fun(string a) { stack<Node>result; int max_id=0; Node node=Node(-1,')'); result.push(node); for(int i=0;i<a.size();i++) { Node node=Node(i,a[i]); if(a[i]=='(') result.push(node); else { if(result.top().c=='(') { result.pop(); /*if(max<i-result.top().key) max=i-result.top().key;*/ max_id=max(max_id,i-result.top().key); } else result.push(node); } } return max_id; } }; class Solution4 { public: int fun(string s) { int answer = 0, depth = 0, start = -1; for (int i = 0; i < s.size(); ++i) { if (s[i] == '(') { ++depth; } else { --depth; if (depth < 0) { start = i; depth = 0; } else if (depth == 0) { answer = max(answer, i - start); } } } cout<<"answer"<<answer<<endl; depth = 0; start = s.size(); for (int i = s.size() - 1; i >= 0; --i) { if (s[i] == ')') { ++depth; } else { --depth; if (depth < 0) { start = i; depth = 0; } else if (depth == 0) { answer = max(answer, start - i); } } } cout<<"answer"<<answer<<endl; return answer; } }; void main() { Solution1 solution; string a("((()()"); cout<<"max="<<solution.fun(a); }
相关文章推荐
- 《小时代》系列收官:别笑人奇葩,看这部现象级电影产品留下哪些
- GCD编程-串行队列与并发队列
- 如何用C语言封装 C++的类,在 C里面使用
- Stockbroker Grapevine - poj 1125 (Floyd算法)
- POJ-1862-Stripies(贪心4)
- zabbix配置脚本服务端与客户端
- 第四次作业
- 阶乘因式分解(二)
- xml序列化、pull解析XML
- Uboot详解
- SQOOP连接SQLServer2005错误
- 生活必备常识
- snprintf函数用法
- JDK动态代理与CGLIB动态代理
- leetcode - Lowest Common Ancestor of a Binary Tree
- Verilog自动售货机设计
- 关于友盟社会化分享框架的一些使用心得
- vsftpd 出现553 Could not create file 解决方法
- yii 使用小技巧
- 气度的养成