#define min(a,b) ((a)<(b))?(a):(b)
int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){
int* row = (int*)calloc(*matrixColSize, sizeof(int));
int* cnt = (int*)calloc(*matrixColSize, sizeof(int));
//int row[301] = { 0 };
//int cnt[301] = { 0 };
int i, j, maxLen=0;
for (i = 0; i < matrixSize; i++)
{
for (j = 0; j < *matrixColSize; j++){
row[j] = (matrix[i][j] == '1') ? row[j] + 1 : 0;
if (row[j] > maxLen){
cnt[j] = (j)?cnt[j - 1] + 1 :1;
if (cnt[j] > maxLen){
maxLen = min(row[j], cnt[j]);
cnt[j] = 0;
}
}
else{
cnt[j] = 0;
}
}
}
return maxLen*maxLen;
}