括号配对
括号有效配对是指:
1)任何一个左括号都能找到和其正确配对的右括号
2)任何一个右括号都能找到和其正确配对的左括号
有效的: (()) ()() (()()) 等
无效的: (() )( 等
问题1: 怎么判断一个括号字符串有效?
思路:
- 用栈: 麻烦
- 用单一变量, 遇到左括号count++, 遇到右括号count–, count<0,返回false, 最后count==0, 返回true
1 | public static boolean valid(String s) { |
问题2: 如果一个括号字符串无效,返回至少填几个字符能让其整体有效 (LeetCode 921)
思路:
- 遇到左括号, count++, 遇到右括号, count–
- 如果count == -1, need++, count恢复成0
- 返回count + need
1 | public static int needParenthese (String s) { |
问题3: 返回一个括号字符串中,最长的括号有效子串的长度 (动态规划) (LeetCode 32)
思路:
i位置是左括号, dp[i] = 0
i位置是右括号, dp[i] = dp[i - 1] + 2 + (pre > 0 ? dp[pre -1] : 0);
i位置往前推dp[i-1]个数, 的前一个数
1 | public static int maxLength(String s) { |
问题4: 给定括号字符串, 返回该字符串最大嵌套层数
思路: 遇到左括号count++, 遇到右括号count–, 返回count最大值
1 | public static boolean isValid(String s) { |