括号字符串的有效性和最长有效长度

【题目】给定一个字符串str,判断是不是整体有效的括号字符串。

public class kuohaoStr {
	public static boolean isValid(String str) {
		if (str == null || str.equals("")) {
			return false;
		}
		int status = 0;
		char[] charArr = str.toCharArray();
		for (int i = 0; i < charArr.length; i++) {
			if (charArr[i] != '(' || charArr[i] != ')') {
				return false;
			}
			if (charArr[i] == ')' && --status < 0) {
				return false;
			}
			if (charArr[i] == '(') {
				status++;
			}
		}
		return status == 0;
	}
}

【补充题目】给定一个括号字符串,返回最长的有效括号子串。

public static int getMaxLength(String str) {
		if (str == null || str.equals("")) {
			return 0;
		}
		char[] charArr = str.toCharArray();
		int[] dp = new int[charArr.length];
		int pre = 0;
		int res = 0;
		for (int i = 1; i < charArr.length; i++) {
			if (charArr[i] == ')') {
				pre = i - dp[i - 1] - 1;
				if (pre > 0 && charArr[pre] == '(') {
					dp[i] = dp[i - 1] + 2 + (pre > 0 ? dp[pre - 1] : 0);
				}
			}
			res = Math.max(res, dp[i]);
		}
		return res;
	}

你可能感兴趣的:(动态规划)