leetcode32

 1 class Solution {
 2 public:
 3     int longestValidParentheses(string s) {
 4         int n = s.length(), longest = 0;
 5         stack<int> st;
 6         for (int i = 0; i < n; i++) {
 7             if (s[i] == '(') st.push(i);
 8             else {
 9                 if (!st.empty()) {
10                     if (s[st.top()] == '(') st.pop();
11                     else st.push(i);
12                 }
13                 else st.push(i);
14             }
15         }
16         if (st.empty()) longest = n;
17         else {
18             int a = n, b = 0;
19             while (!st.empty()) {
20                 b = st.top(); st.pop();
21                 longest = max(longest, a-b-1);
22                 a = b;
23             }
24             longest = max(longest, a);
25         }
26         return longest;
27     }
28 };

参考:https://leetcode.com/problems/longest-valid-parentheses/discuss/14126/My-O(n)-solution-using-a-stack

猜你喜欢

转载自www.cnblogs.com/asenyang/p/10488744.html