Leetcode: Longest Valid Parentheses

题目

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

For "(()", the longest valid parentheses substring is "()", which has length = 2.

Another example is ")()())", where the longest valid parentheses substring is "()()", which has length = 4.

 

思路

1. 状态模拟题, 最不喜欢的题目

2. 参考别人的思路, o(n) 完美解决, 漂亮的代码

3. stack 并不存字符, 而是存储左括号的位置, 失去匹配的右括号作为分隔符

 

代码

class Solution {

public:

	int ans;

	int sum;

    int longestValidParentheses(string s) {

		ans = sum = 0;

		deque<int> stack;

		if(s.size() <= 0)

			return 0;

		int last = -1;

		for(int i = 0; i < s.size(); i ++) {

			if(s[i] == '(') {

				stack.push_back(i);

			}else{

				if(stack.empty()) {

					last = i;

				}else{

					stack.pop_back();

					if(stack.empty()) {

						ans = max(ans, i-last);

					}else{

						ans = max(ans, i-stack.back());

					}

					

				}

			}

		}

		return ans;

	}

};

  

你可能感兴趣的:(LeetCode)