题目意思是取数组里面的几个字符串作为子集,然后总共包含的0个数不超m,1个数不超n。问子集最多有多少字符串?
class Solution {
public int findMaxForm(String[] strs, int m, int n) {
int[][] dp = new int[m+1][n+1]; //dp[i][j]表示i个0,j个1时最多子集个数
//遍历字符串
for(String str : strs){
int one_num = 0,zero_num=0;
//计算0和1的个数
for(int i=0;i<str.length();i++){
if(str.charAt(i)=='0'){
zero_num++;
}else{
one_num++;
}
}
for(int i=m;i>=zero_num;i--){
for(int j=n;j>=one_num;j--){
dp[i][j] = Math.max(dp[i][j],dp[i-zero_num][j-one_num]+1);
}
}
}
return dp[m][n];
}
}