474. Ones and Zeroes

class Solution {
public:
    int findMaxForm(vector<string>& strs, int m, int n)
    {
        vector<vector<int>> dp(m + 1, vector<int>(n + 1));
        for (const auto& s : strs)
        {
            int zeros = 0, ones = 0;
            for (const auto& c : s)
            {
                c == '0' ? ++zeros : ++ones;
            }
            for (int i = m; i >= zeros; --i)
            {
                for (int j = n; j >= ones; --j)
                {
                    dp[i][j] = max(dp[i][j], dp[i - zeros][j - ones] + 1);
                }
            }
        }
        return dp[m][n];
    }
};
  • T: O(LMN)O(L \cdot M \cdot N)
  • S: O(MN)O(M \cdot N)