-----QUESTION-----
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
-----SOLUTION-----
class Solution {
public:
int maximalRectangle(vector<vector<char>> &matrix) {
if(matrix.empty()) return 0;
vector<vector<int>> dp(matrix.size(),vector<int>(matrix[0].size(),0));
for(int i = 0; i < matrix.size(); i++)
dp[i][0] = matrix[i][0] == '1' ? 1 : 0;
for(int i = 0; i < matrix.size(); i++)
for(int j = 1; j < matrix[i].size(); j++)
dp[i][j] = matrix[i][j] == '1' ? dp[i][j-1] + 1 : 0;
int width;
int ret = 0;
for(int j = 0; j < matrix[0].size(); j++)
{
for(int i = 0; i < matrix.size(); i++)
{
if(dp[i][j] == 0) continue;
width = INT_MAX;
for(int k = i ; k >= 0; k--)
{
width = min(width, dp[k][j]);
ret = max(ret, width * (i-k+1));
}
}
}
return ret;
}
};