题目:给定一个字符串,判读是不是整体有效的括号字符串。
例:
str=”()”,返回true
str=”(())”,返回true
str=”())”,返回false
str=”()a()”,返回false
实现
- 遍历str,若不是括号,则直接返回false。
- 遍历到每个字符,检查括号的数量,如果’)’更多,则返回false。
- 遍历完,若’(‘的数量和’)’相等,则返回true,否则返回false。
1 | public static boolean isValidKuohao (String str) { |
补充题目:给定一个括号字符串str,返回最长的有效括号子串。
例:
str=”(()())”,返回6
str=”())”,返回2
str=”()(()()(“,返回4
实现:动态规划
- 生成dp[N]数组,dp[i]表示在str[0,…i]中以str[i]结尾的字符的最长有效括号子串的长度。
- dp[0]=0
- 从左到右依次遍历str[1,…N-1],假设遍历到str[i]
1)若str[i]==’(‘,由于括号一定是以’)’结尾,所以以’(‘结尾是不可能的,dp[i]=0
2)若str[i]==’)’,