java 678.有效的括号字符串(#DFS).java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 678.有效的括号字符串(#DFS).java相关的知识,希望对你有一定的参考价值。

int d[110][110];
string s;

bool doit(int x,int y)
{
  bool ans;
  int i,j;
  if (x>y) return 1;
  if (x==y)
  {
    if (s[x]=='*') return true;
    else return false;
  }
  if (d[x][y]!=-1) return d[x][y];
  ans=false;
  for (i=x;i+1<=y;i++)
  {
    if ((doit(x,i))&&(doit(i+1,y)))
      ans=true;
  }
  if (((s[x]=='(')&&(s[y]==')'))||((s[x]=='*')&&(s[y]==')'))||((s[x]=='(')&&(s[y]=='*'))||((s[x]=='*')&&(s[y]=='*')))
  {
    if (doit(x+1,y-1)) ans=true;
  }
  if (s[x]=='*')
  {
    if (doit(x+1,y)) ans=true;
  }
  if (s[y]=='*')
  {
    if (doit(x,y-1)) ans=true;
  }
  d[x][y]=ans;
  return ans;
}

class Solution {
public:
    bool checkValidString(string ss) {
      s=ss;
      memset(d,-1,sizeof(d));
      return doit(0,s.length()-1);
    }
};
class Solution {
    private boolean helper(int left, int right, String s, int pos) {
        if (left < right) return false;
        if (pos == s.length()) return left == right; 
        // for (int i = pos; i < s.length(); i++) {
            if (s.charAt(pos) == '(') {
                if (helper(left + 1, right, s, pos + 1)) {
                    return true;
                }
            
            } else if (s.charAt(pos) == ')') {
                if (helper(left, right + 1, s, pos + 1) ) {
                    return true;
                }
            } else if (s.charAt(pos) == '*') {
                if (helper(left + 1, right, s, pos + 1) || helper(left, right + 1, s, pos + 1) || helper(left, right, s, pos + 1)) {
                    return true;
                }
            }
        // }
        return false;
    }
    public boolean checkValidString(String s) {
        if (s == null || s.length() < 1) return true;
        return helper(0, 0, s, 0);
    }
}

以上是关于java 678.有效的括号字符串(#DFS).java的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 678.有效的括号字符串

Q678 有效的括号字符串

678. 有效的括号字符串

678. 有效的括号字符串

678. 有效的括号字符串

字符串678. 有效的括号字符串