最长平衡括号前缀的长度
给定字符串开括号 '(' 和闭括号 ')'。任务是找到最长平衡前缀的长度。
例子:
Input : S = "((()())())(("
Output : 10
From index 0 to index 9, they are forming
a balanced parentheses prefix.
Input : S = "()(())((()"
Output : 6
这个想法是将左括号'('的值设为1,将右括号')'的值设为-1。现在开始查找给定字符串的前缀总和。最远的索引,比如 maxi,其中 sum 的值为 0,是存在最长平衡前缀的索引。所以答案是 maxi + 1。
下面是这种方法的实现:
C++
// CPP Program to find length of longest balanced
// parentheses prefix.
#include
using namespace std;
// Return the length of longest balanced parentheses
// prefix.
int maxbalancedprefix(char str[], int n)
{
int sum = 0;
int maxi = 0;
// Traversing the string.
for (int i = 0; i < n; i++) {
// If open bracket add 1 to sum.
if (str[i] == '(')
sum += 1;
// If closed bracket subtract 1
// from sum
else
sum -= 1;
// if first bracket is closing bracket
// then this condition would help
if (sum < 0)
break;
// If sum is 0, store the index
// value.
if (sum == 0)
maxi = i + 1;
}
return maxi;
}
// Driven Program
int main()
{
char str[] = "((()())())((";
int n = strlen(str);
cout << maxbalancedprefix(str, n) << endl;
return 0;
}
Java
// Java Program to find length of longest
// balanced parentheses prefix.
import java.io.*;
class GFG {
// Return the length of longest
// balanced parentheses prefix.
static int maxbalancedprefix(String str, int n)
{
int sum = 0;
int maxi = 0;
// Traversing the string.
for (int i = 0; i < n; i++) {
// If open bracket add 1 to sum.
if (str.charAt(i) == '(')
sum += 1;
// If closed bracket subtract 1
// from sum
else
sum -= 1;
// if first bracket is closing bracket
// then this condition would help
if (sum < 0)
break;
// If sum is 0, store the index
// value.
if (sum == 0)
maxi = i + 1;
}
return maxi;
}
// Driven Program
public static void main(String[] args)
{
String str = "((()())())((";
int n = str.length();
System.out.println(maxbalancedprefix(str, n));
}
}
// This code is contributed by vt_m
Python3
# Python3 code to find length of
# longest balanced parentheses prefix.
# Function to return the length of
# longest balanced parentheses prefix.
def maxbalancedprefix (str, n):
_sum = 0
maxi = 0
# Traversing the string.
for i in range(n):
# If open bracket add 1 to sum.
if str[i] == '(':
_sum += 1
# If closed bracket subtract 1
# from sum
else:
_sum -= 1
# if first bracket is closing bracket
# then this condition would help
if _sum < 0:
break
# If sum is 0, store the
# index value.
if _sum == 0:
maxi = i + 1
return maxi
# Driver Code
str = '((()())())(('
n = len(str)
print(maxbalancedprefix (str, n))
# This code is contributed by "Abhishek Sharma 44"
C#
// C# Program to find length of longest
// balanced parentheses prefix.
using System;
class GFG {
// Return the length of longest
// balanced parentheses prefix.
static int maxbalancedprefix(string str, int n)
{
int sum = 0;
int maxi = 0;
// Traversing the string.
for (int i = 0; i < n; i++) {
// If open bracket add 1 to sum.
if (str[i] == '(')
sum += 1;
// If closed bracket subtract 1
// from sum
else
sum -= 1;
// if first bracket is closing bracket
// then this condition would help
if (sum < 0)
break;
// If sum is 0, store the index
// value.
if (sum == 0)
maxi = i + 1;
}
return maxi;
}
// Driven Program
public static void Main()
{
string str = "((()())())((";
int n = str.Length;
Console.WriteLine(maxbalancedprefix(str, n));
}
}
// This code is contributed by vt_m
PHP
Javascript
输出:
10