bool isValid(const string& s, int from, int to) {
int balance = 0;
for (int k = from; k <= to; k++) {
balance += s[k] == '(' ? 1 : -1;
if (balance < 0) return false;
}
return balance == 0;
}
int longestValidParentheses(string s) {
int best = 0;
for (int i = 0; i < (int)s.size(); i++) {
for (int j = i + 1; j < (int)s.size(); j += 2) {
if (isValid(s, i, j) && j - i + 1 > best) best = j - i + 1;
}
}
return best;
}
public int longestValidParentheses(String s) {
int best = 0;
for (int i = 0; i < s.length(); i++) {
for (int j = i + 1; j < s.length(); j += 2) {
if (isValid(s, i, j) && j - i + 1 > best) best = j - i + 1;
}
}
return best;
}
private boolean isValid(String s, int from, int to) {
int balance = 0;
for (int k = from; k <= to; k++) {
balance += s.charAt(k) == '(' ? 1 : -1;
if (balance < 0) return false;
}
return balance == 0;
}
def is_valid(s, start, end):
balance = 0
for k in range(start, end + 1):
balance += 1 if s[k] == '(' else -1
if balance < 0: return False
return balance == 0
def longest_valid_parentheses(s):
best = 0
for i in range(len(s)):
for j in range(i + 1, len(s), 2):
if is_valid(s, i, j) and j - i + 1 > best: best = j - i + 1
return best
function longestValidParentheses(s: string): number {
let best = 0;
for (let i = 0; i < s.length; i++) {
for (let j = i + 1; j < s.length; j += 2) {
if (isValid(s, i, j) && j - i + 1 > best) best = j - i + 1;
}
}
return best;
}
function isValid(s: string, from: number, to: number): boolean {
let balance = 0;
for (let k = from; k <= to; k++) {
balance += s[k] === '(' ? 1 : -1;
if (balance < 0) return false;
}
return balance === 0;
}
int longestValidParentheses(string s) {
int best = 0;
for (int i = 0; i < (int)s.size(); i++) {
int balance = 0;
for (int j = i; j < (int)s.size(); j++) {
balance += s[j] == '(' ? 1 : -1;
if (balance < 0) break;
if (balance == 0) best = max(best, j - i + 1);
}
}
return best;
}
public int longestValidParentheses(String s) {
int best = 0;
for (int i = 0; i < s.length(); i++) {
int balance = 0;
for (int j = i; j < s.length(); j++) {
balance += s.charAt(j) == '(' ? 1 : -1;
if (balance < 0) break;
if (balance == 0) best = Math.max(best, j - i + 1);
}
}
return best;
}
def longest_valid_parentheses(s):
best = 0
for i in range(len(s)):
balance = 0
for j in range(i, len(s)):
balance += 1 if s[j] == '(' else -1
if balance < 0: break
if balance == 0: best = max(best, j - i + 1)
return best
function longestValidParentheses(s: string): number {
let best = 0;
for (let i = 0; i < s.length; i++) {
let balance = 0;
for (let j = i; j < s.length; j++) {
balance += s[j] === '(' ? 1 : -1;
if (balance < 0) break;
if (balance === 0) best = Math.max(best, j - i + 1);
}
}
return best;
}
int longestValidParentheses(string s) {
vector<int> stack{-1};
int best = 0;
for (int i = 0; i < (int)s.size(); i++) {
if (s[i] == '(') {
stack.push_back(i);
} else {
stack.pop_back();
if (stack.empty()) {
stack.push_back(i);
} else {
best = max(best, i - stack.back());
}
}
}
return best;
}
public int longestValidParentheses(String s) {
Deque<Integer> stack = new ArrayDeque<>(); stack.push(-1);
int best = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack.push(i);
} else {
stack.pop();
if (stack.isEmpty()) {
stack.push(i);
} else {
best = Math.max(best, i - stack.peek());
}
}
}
return best;
}
def longest_valid_parentheses(s):
stack = [-1]
best = 0
for i in range(len(s)):
if s[i] == '(':
stack.append(i)
else:
stack.pop()
if not stack:
stack.append(i)
else:
best = max(best, i - stack[-1])
return best
function longestValidParentheses(s: string): number {
const stack: number[] = [-1];
let best = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] === '(') {
stack.push(i);
} else {
stack.pop();
if (stack.length === 0) {
stack.push(i);
} else {
best = Math.max(best, i - stack[stack.length - 1]);
}
}
}
return best;
}
int longestValidParentheses(string s) {
int best = 0;
int open = 0, close = 0;
for (int i = 0; i < (int)s.size(); i++) {
if (s[i] == '(') open++; else close++;
if (open == close) best = max(best, 2 * close);
else if (close > open) open = close = 0;
}
open = close = 0;
for (int i = (int)s.size() - 1; i >= 0; i--) {
if (s[i] == '(') open++; else close++;
if (open == close) best = max(best, 2 * open);
else if (open > close) open = close = 0;
}
return best;
}
public int longestValidParentheses(String s) {
int best = 0;
int open = 0, close = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') open++; else close++;
if (open == close) best = Math.max(best, 2 * close);
else if (close > open) open = close = 0;
}
open = close = 0;
for (int i = s.length() - 1; i >= 0; i--) {
if (s.charAt(i) == '(') open++; else close++;
if (open == close) best = Math.max(best, 2 * open);
else if (open > close) open = close = 0;
}
return best;
}
def longest_valid_parentheses(s):
best = 0
open_, close = 0, 0
for i in range(len(s)):
if s[i] == '(': open_ += 1
else: close += 1
if open_ == close: best = max(best, 2 * close)
elif close > open_: open_ = close = 0
open_ = close = 0
for i in range(len(s) - 1, -1, -1):
if s[i] == '(': open_ += 1
else: close += 1
if open_ == close: best = max(best, 2 * open_)
elif open_ > close: open_ = close = 0
return best
function longestValidParentheses(s: string): number {
let best = 0;
let open = 0, close = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] === '(') open++; else close++;
if (open === close) best = Math.max(best, 2 * close);
else if (close > open) open = close = 0;
}
open = close = 0;
for (let i = s.length - 1; i >= 0; i--) {
if (s[i] === '(') open++; else close++;
if (open === close) best = Math.max(best, 2 * open);
else if (open > close) open = close = 0;
}
return best;
}