func maximalSquare(matrix [][]byte) int { n := len(matrix) if n == 0 { return 0 } m := len(matrix[0]) if m == 0 { return 0 } sideLen, sideMax := m, 0 if n < m { sideLen = n } hei := make([][]int, n) // Init the accumulative height matrix hei[0] = make([]int, m) combo := make([]int, sideLen+1) for i := range matrix[0] { hei[0][i] = int(matrix[0][i]-'0') if hei[0][i] == 1 { sideMax = 1 } } for i := 1; i < n; i++ { hei[i] = make([]int, m) combo = make([]int, sideLen+1) for j := range matrix[i] { if matrix[i][j] == '0' { hei[i][j] = 0 for k := sideMax+1; k <= sideLen; k++ { combo[k] = 0 } } else { hei[i][j] = hei[i-1][j] + 1 for k := sideMax+1; k <= sideLen && k <= hei[i][j]; k++ { combo[k]++ if combo[k] == k { sideMax = k } } for k := hei[i][j]+1; k <= sideLen; k++ { combo[k] = 0 } } } } return sideMax * sideMax }