Problem of the day
You are given a string ‘S’ containing only the characters ‘)’ and ‘(‘. You need to find the length of the longest valid i.e. well-formed parentheses substring.
For example:Let the given string be “(()())((”.
Here the valid parentheses substrings are: “()”, “()” and “(()())”. Out of these the longest valid string is “(()())” which has a length 6.
The first line of input contains an integer ‘T’ representing the number of test cases.
The first and the only line of every test case contains the string S.
Output Format:
For each test case, the length of the longest valid (well-formed) parentheses substring is printed.
The output for each test case is printed in a separate line.
Note:
You don’t need to print anything. It has already been taken care of. Just implement the given function.
1 <= T <= 100
1 <= Length(S) <= 10^4
Where ‘T’ is the number of test cases and ‘S’ is the given string.
Time Limit: 1sec
2
)()()))
)))(((
4
0
For the first test case, the longest valid (well-formed) parentheses substring is “()()” with length 4.
For the second test case, there is no valid parentheses substring. Hence, the output is 0.
2
()((())()
()()()()()()()
6
14
Can you solve it by generating all the possible substrings?
The algorithm for the above approach is:
O(Length(S) ^ 3) per test case, where S is the given string.
In the worst case, we are generating all the possible substrings of string S. Generation of each substring requires approximately constant time. For a string S there are (Length(S) * (Length(S) +1)) / 2 possible substrings. For each substring we check if it is valid or not, which requires O(Length(S)) operations. Hence the overall time complexity is O((Length(S) * (Length(S) + 1))/2) * O(Length(S))). = O(Length(S) ^ 3).
O(Length(S)) per test case, where S is the given string.
In the worst case, O(Length(S)) extra space is required by the stack.