1 public class Solution { 2 public int findMaxForm(String[] strs, int m, int n) { 3 if (strs == null || strs.length == 0) { 4 return 0; 5 } 6 int[][] dp = new int[m + 1][n + 1]; 7 for (String s : strs) { // 每个字符串只能用一次 8 int ones = 0, zeros = 0; 9 for (char c : s.toCharArray()) {10 if (c == '0') {11 zeros++;12 } else {13 ones++;14 }15 }16 for (int i = m; i >= zeros; i--) {17 for (int j = n; j >= ones; j--) {18 dp[i][j] = Math.max(dp[i][j], dp[i - zeros][j - ones] + 1);19 }20 }21 }22 return dp[m][n];23 }24 }