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. 有效的括号字符串