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