26 lines
469 B
Go
26 lines
469 B
Go
package q221
|
|
|
|
func maximalSquare(matrix [][]byte) int {
|
|
w, h := len(matrix[0]), len(matrix)
|
|
|
|
maxSq := make([]int16, w+h)
|
|
maxV := make([]int16, w)
|
|
ret := 0
|
|
for y := range h {
|
|
var maxH int16
|
|
for x := range w {
|
|
if matrix[y][x] == '0' {
|
|
maxH, maxV[x], maxSq[x-y+h] = 0, 0, 0
|
|
continue
|
|
}
|
|
|
|
maxH++
|
|
maxV[x]++
|
|
maxSq[x-y+h] = min(maxH, maxV[x], maxSq[x-y+h]+1)
|
|
ret = max(ret, int(maxSq[x-y+h]))
|
|
}
|
|
}
|
|
return ret * ret
|
|
}
|
|
|
|
var _ = maximalSquare
|