Maximal Square


Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.

For example, given the following matrix:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0



class Solution {
public:
//dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + 1
int maximalSquare(vector<vector<char>>& matrix) {

int m=matrix.size();
if(m<1)
return 0;
int n=matrix[0].size();
if(n<1)
return 0;

int max=0;
vector< vector<int> > dp(m,vector<int>(n,0));

for(int i=0;i<m;i++)
{
dp[i][0]=matrix[i][0]=='0'?0:1;
if(matrix[i][0]=='1')
max=1;
}

for(int i=0;i<n;i++)
{
dp[0][i]=matrix[0][i]=='0'?0:1;
if(matrix[0][i]=='1')
max=1;
}
for(int i=1;i<m;i++)
for(int j=1;j<n;j++)
{
if(matrix[i][j]=='1')
{
dp[i][j]=Min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1])+1;
if(dp[i][j]>max)
max=dp[i][j];
}
}
return max*max;
}

int Min(int x,int y,int z)
{
if(x>y)
x=y;
if(x>z)
return z;
else
return x;
}
};