链接:https://leetcode.cn/problems/longest-valid-parentheses/
题目:给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
思路:动态规划,定义等长数组记录对应字符串下标时的括号长度,因为以’(‘结尾是非法的括号,仅对’)'下标进行记录。因为连续多个有效括号相邻形如后面这个形式:
“()()()”
“(())(())”
亦视为有效括号,所以在每次记录下标的时候需要查看当前记录的括号长度向前遍历同等位置是否同为有效括号,用来处理连续多对括号形如这样形式的字符串。
代码:
public static int longestValidParentheses1(String s){
int[] result = new int[s.length()];
char[] chars = s.toCharArray();
int left=0;
for (int i=0;i<chars.length;i++){
if (chars[i]==40){
left++;
}
if (chars[i]==41&&left!=0){
left--;
result[i]=result[i-1]+2;
if (i-result[i]>0&&result[i-result[i]]!=0){
result[i]=result[i]+result[i-result[i]];
}
}
}
int max =0;
for (int j: result){
if (max<j){
max=j;
}
}
return max;
}
作者小白,侵权请私信删。
2022.10.02