1. 程式人生 > >LeetCode:32. 最長有效括號

LeetCode:32. 最長有效括號

題目

LeetCode:Longest Valid Parentheses

給定一個只包含'('')'的字串,找出最長的包含有效括號的子串的長度。

示例:

輸入: "(()"
輸出: 2
解釋: 最長有效括號子串為"()"

思路

參考他人的程式碼
利用一個棧,棧頂永遠存前一個左括號的位置,當有匹配的右括號,則括號長度為當前位置 - 當前匹配左括號前一個左括號位置,如果沒有前一個左括號,則序列長度就是當前位置的下標 + 1
其實這個題本質就是一個動態規劃的問題。
如果不明白,請仔細體會程式碼。

程式碼

class Solution {
public:
    int
longestValidParentheses(string s) { vector<int> index; int max = 0; for (int i = 0; i < s.size(); i++) { //當碰到右括號才有可能存在有效序列,且有左括號與之匹配 if (s[i] == ')' && index.empty() == false && s[index.back()] == '(') { //左括號的下標出棧
index.pop_back(); if (index.empty() == true) { //如果序列為空,說明i + 1均為有效序列 max = i + 1; } else if (max < i - index.back()) { //index存有效序列開始的下標,與i相差的值為有效序列長度
max = i - index.back(); } } else { //如果不是右括號或者沒有與之匹配的左括號,入棧下標 index.push_back(i); } } return max; } };