File tree 1 file changed +30
-0
lines changed
1 file changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -101,6 +101,36 @@ \subsubsection{使用栈}
101
101
};
102
102
\end {Code }
103
103
104
+ \subsubsection {Dynamic Programming, One Pass }
105
+ \begin {Code }
106
+ // LeetCode, Longest Valid Parenthese
107
+ // 时间复杂度O(n),空间复杂度O(1)
108
+ // @author 一只杰森(http://weibo.com/2197839961)
109
+ class Solution {
110
+ public:
111
+ int longestValidParentheses(string s) {
112
+ if (s.empty()) return 0;
113
+ int ret = 0;
114
+ int* d = new int[s.size()];
115
+ d[s.size() - 1] = 0;
116
+ for (int i = s.size() - 2; i >= 0; --i) {
117
+ if (s[i] == ')' ) d[i] = 0;
118
+ else {
119
+ int match = i + d[i + 1] + 1; // case: "((...))"
120
+ if (match < s.size() && s[match] == ')' ) { // found matching ')'
121
+ d[i] = match - i + 1;
122
+ if (match + 1 < s.size()) d[i] += d[match + 1]; // more valid sequence after j: "((...))(...)"
123
+ } else {
124
+ d[i] = 0; // no matching ')'
125
+ }
126
+ }
127
+ ret = max(ret, d[i]);
128
+ }
129
+ return ret;
130
+ }
131
+ };
132
+ \end {Code }
133
+
104
134
105
135
\subsubsection {两遍扫描 }
106
136
\begin {Code }
You can’t perform that action at this time.
0 commit comments