Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.
Example:
Input: [ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"] ] Output: 6
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
if(matrix.size()==0) return 0 ;
int leni = matrix.size();
int lenj = matrix[0].size();
vector<int> vec(lenj, 0);
int maxSize = 0;
for (int i = 0; i < leni; ++i)
{
for (int j = 0; j < lenj; ++j)
{
if (matrix[i][j] == '0') vec[j] = 0;
else
{
vec[j] += 1;
}
}
int temp = largestRectangleArea(vec);
if (maxSize < temp)
maxSize = temp;
}
return maxSize;
}
int largestRectangleArea(vector<int>& heights)
{
int area = 0;
for (int i = 0; i < heights.size(); ++i)
{
for (int k = i + 1; k < heights.size(); k++)
{
if (heights[k] < heights[k - 1])
{
i = k - 1;
break;
}
else
{
i = k;
}
}
int lowest = heights[i];
for (int j = i; j >= 0; j--)
{
if (heights[j] < lowest)
lowest = heights[j];
int currArrea = (i - j + 1) * lowest;
if (currArrea > area) area = currArrea;
}
}
return area;
}
};