LeetCode 32. 最大有効かっこPython/Java
2003 ワード
'('
および')'
のみを含む文字列が与えられ、最も長い有効な括弧を含むサブ列の長さが見出される.例1:
: "(()"
: 2
: "()"
例2:
: ")()())"
: 4
: "()()"
考え方:1.スタックを使用して操作します.左かっこの場合、直接stackに入ります.右かっこの場合、stackに要素ペアがない場合は、有効カッコが終了したことを示します.開始位置を更新します.要素ペアがpopに対して左かっこペアを出します.この場合、有効カッコを継続しない保証はありません.そのため、現在の最長距離に基づいてmaxlenを更新します.この場合、スタックトップのインデックスから減算して長さを計算します.
コード:
class Solution:
def longestValidParentheses(self, s):
ans = 0
n = len(s)
stack = []
st = 0
for i in range(n):
if s[i] == '(':
stack.append(i)
else:
if len(stack) == 0:
st = i+ 1
continue
else:
stack.pop()
if len(stack) == 0:
ans = max(ans,i - st + 1)
else:
ans = max(ans,i-stack[-1])
return ans
Java版
class Solution {
public int longestValidParentheses(String s) {
int ans = 0;
int n = s.length();
Stack st = new Stack();
int index = 0;
for (int i = 0; i
構想2:ダイナミックプランニング,dp[i]は開始からi点までの最長有効括弧の長さを表す(i点の場合は有効,この場合iが「(」,無効は0)
コード:
class Solution:
def longestValidParentheses(self, s):
s = ')' + s
n = len(s)
if n<2:
return 0
ans = 0
dp = [0] * n
for i in range(1,n):
if s[i] == ')':
if s[i-1-dp[i-1]] == '(':
dp[i] = dp[i - 1] + 2
dp[i] += dp[i-dp[i]]
ans = max(ans,dp[i])
return ans