class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
vector<vector<int>> r;
int m = matrix.size();
if(m==0){
return 0;
}
int n = matrix[0].size();
r.resize(m);
for(int i=0;i<m;i++){
r[i].resize(n);
for(int j=0;j<n;j++){
r[i][j] = 0;
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(matrix[i][j]=='1'){
if(i-1>=0 && j-1 >=0){
int c = 1;
if(r[i-1][j-1]>0){
for(int k=1;k<=r[i-1][j-1];k++){
if(matrix[i-k][j]=='0' || matrix[i][j-k]=='0'){
break;
}else{
c++;
}
}
}
r[i][j] = c;
}else{
r[i][j] = 1;
}
}
}
}
int max_size = 0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
max_size = max_size>r[i][j]?max_size:r[i][j];
}
}
return max_size*max_size;
}
};