#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; }