2种方法
1、深度搜索
2、动态规划
public class _115_ {
int totalNum = 0;
public int numDistinct(String s, String t) {
helper2(s, t,0);
return totalNum;
}
public void helper2(String s, String t, int begin)
{
if(s.length()<t.length()) return;
if(s.equals(t)){totalNum++;return;}
for(int i = begin;i<s.length();i++)
{
String newS = new String(s);
newS = (newS.substring(0, i)+newS.substring(i+1));
if(helper(newS, t))
{
helper2(newS, t, i);
}
}
}
public boolean helper(String s, String t)
{
int i = 0,j = 0;
while(i<s.length()&&j<t.length())
{
if(s.charAt(i) == t.charAt(j))
{
i++;j++;
}
else
i++;
}
if(j == t.length())
{
return true;
}
return false;
}
public int numDistinct2(String s, String t)
{
if(s == null || t == null){return 0;}
int[][] dp = new int[s.length()+1][t.length()+1];
for(int i = 0;i<dp.length;i++)
{
dp[i][0] = 1;
}
for(int i = 1;i<dp.length;i++)
{
for(int j =1;j<dp[i].length;j++)
{
if(s.charAt(i) == t.charAt(j))
{
dp[i][j] = dp[i-1][j-1]+dp[i-1][j];
}else
dp[i][j] = dp[i-1][j];
}
}
return dp[s.length()][t.length()];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
_115_ _ = new _115_();
//System.out.println(_.helper("aceac", "aceac"));
_.numDistinct("aceace", "ace");
}
}