474.一和零


解:

  1. class Solution {
  2. private int[] cnt(String str) {
  3. int[] cnt = new int[2];
  4. for(char c : str.toCharArray()) {
  5. if(c == '0') {
  6. cnt[0] ++;
  7. } else {
  8. cnt[1]++;
  9. }
  10. }
  11. return cnt;
  12. }
  13. public int findMaxForm(String[] strs, int m, int n) {
  14. int len = strs.length;
  15. int[][] f = new int[m+1][n+1];
  16. for(int i = 0; i < len; i++) {
  17. int[] ret = cnt(strs[i]);
  18. for(int j=m; j>=ret[0]; j--) {
  19. for(int k=n; k>=ret[1]; k--) {
  20. f[j][k] = Math.max(f[j][k], f[j-ret[0]][k-ret[1]]+1);
  21. }
  22. }
  23. }
  24. return f[m][n];
  25. }
  26. }