int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){ int dp[301][301],i,j,max = 0; memset(dp,0,sizeof(dp)); for(i=0;i<matrixSize;i++) { for(j=0;j<matrixColSize[0];j++) { if(matrix[i][j] == '1') dp[i][j] = 1; } } for(i=0;i<matrixSize;i++) { for(j=0;j<matrixColSize[i];j++) { if(i && j) { if(dp[i][j] && dp[i-1][j-1] && dp[i-1][j] && dp[i][j-1]) dp[i][j] = fmin(dp[i-1][j-1],fmin(dp[i-1][j],dp[i][j-1])) + 1; } if(dp[i][j] > max) max = dp[i][j]; } } return pow(max,2); }