| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 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}
 |