代码改变世界

leetcode - Longest Valid Parentheses

2013-04-26 18:52  张汉生  阅读(140)  评论(0编辑  收藏  举报

题目描述:点击此处

 1 class Solution {
 2 public:
 3   int longestValidParentheses(string s) {
 4     // Start typing your C/C++ solution below
 5     // DO NOT write int main() function
 6     stack<int> lefts;
 7     int len = s.length();
 8     int * f = new int [len];
 9     int rlt = 0;
10     int i ;
11     for (i=0; i<len; i++)
12       f[i] = -1;
13     for (i=0; i<len; i++){
14       char c = s.at(i);
15       if (c=='('){
16         lefts.push(i);
17       }
18       else if (!lefts.empty()){
19         int t = lefts.top();
20         lefts.pop();
21         f[t] = (i-t+1)/2;
22       }
23     }
24     i = 0;
25     while (i<len){
26       if (f[i] == -1){
27         i++;
28         continue;
29       }
30       int tlen = 0;
31       while (i<len && f[i]!=-1){
32         tlen += f[i];
33         if (tlen > rlt)
34           rlt = tlen ;
35         i += 2*f[i];
36       }
37     }
38     delete []f;
39     return 2  * rlt;
40   }
41 };