https://leetcode.com/problems/valid-parenthesis-string/description/
给定一个字符串,字符串中可以有(、)、*
左括号,有括号和星号,星号可以表示左括号或右括号或空字符。返回该字符串是否可以左右括号完全匹配。
示例一: 递归
class Solution { public boolean checkValidString(String s) { if(s == null) return true; return isValid(s, 0, 0); } private boolean isValid(String s, int index, int count) { if(count < 0) return false; for(int i = index; i < s.length(); i++) { if(s.charAt(i) == '(') count ++; else if(s.charAt(i) == ')') if(count <= 0) return false; else count--; else if(s.charAt(i) == '*') return isValid(s, i + 1, count + 1) || isValid(s, i + 1, count) || isValid(s, i + 1, count -1); } return count == 0; } }
示例二:这个方法真的太神奇了
class Solution { public boolean checkValidString(String s) { int l = 0; int r = 0; for(char c: s.toCharArray()) { l = c == '(' ? 1: -1; r = c == ')' ? -1 : 1; if(r < 0) return false; l = Math.max(l, 0); } return lo == 0; } }