java 115.不同的子序列(#2d).java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 115.不同的子序列(#2d).java相关的知识,希望对你有一定的参考价值。
public int numDistincts(String S, String T) {
int[][] table = new int[S.length() + 1][T.length() + 1];
for (int i = 0; i < S.length(); i++)
table[i][0] = 1;
for (int i = 1; i <= S.length(); i++) {
for (int j = 1; j <= T.length(); j++) {
if (S.charAt(i - 1) == T.charAt(j - 1)) {
table[i][j] += table[i - 1][j] + table[i - 1][j - 1];
} else {
table[i][j] += table[i - 1][j];
}
}
}
return table[S.length()][T.length()];
}
public class Solution {
public int numDistinct(String s, String t) {
if (s == null || t == null || s.length() < 1 || t.length() < 1) return 0;
int lenS = s.length();
int lenT = t.length();
int[] dp = new int[lenT + 1];
Map<Character, List<Integer>> map = new HashMap<>();
for (int i = 0; i < lenT; i++) {
char c = t.charAt(i);
map.putIfAbsent(c, new ArrayList<Integer>());
map.get(c).add(i + 1);
}
dp[0] = 1;
for (int i = 1; i <= lenS; i++) {
char c = s.charAt(i - 1);
if (map.containsKey(c)) {
List<Integer> temp = map.get(c);
int[] pre = new int[temp.size()];
for (int j = 0; j < temp.size(); j++)
pre[j] = dp[temp.get(j) - 1];
// the relation
for (int j = 0; j < temp.size(); j++) {
dp[temp.get(j)] += pre[j];
}
}
}
return dp[lenT];
}
}
public class Solution {
public int numDistinct(String s, String t) {
if (s == null || t == null || s.length() < 1 || t.length() < 1) return 0;
int lenS = s.length();
int lenT = t.length();
int[][] dp = new int[lenS + 1][lenT + 1];
Map<Character, List<Integer>> map = new HashMap<>();
for (int i = 0; i < lenT; i++) {
char c = t.charAt(i);
map.putIfAbsent(c, new ArrayList<Integer>());
map.get(c).add(i + 1);
}
dp[0][0] = 1;
for (int i = 1; i <= lenS; i++) {
//dp[i] = dp[i - 1];
//copy values
System.arraycopy(dp[i - 1], 0, dp[i], 0, lenT + 1);
char c = s.charAt(i - 1);
if (map.containsKey(c)) {
for (int j : map.get(c)) {
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];
}
}
}
return dp[lenS][lenT];
}
}
以上是关于java 115.不同的子序列(#2d).java的主要内容,如果未能解决你的问题,请参考以下文章
java 115.不同的子序列(#2d).java
java 115.不同的子序列(#2d).java
java 115.不同的子序列(#2d).java
java 115.不同的子序列(#2d).java
java 115.不同的子序列(#2d).java
java 115.不同的子序列(#2d).java