题目
解题
这题 感觉还是只能动态规划
from typing import *
def solution(matrix: List[List[str]]):
if not matrix:
return 0
y_length = len(matrix)
x_length = len(matrix[0])
left = [0] * x_length # 初始化左边界
right = [x_length] * x_length # 初始化右边界
height = [0] * x_length # 初始化高度
max_area = 0
for y_i in range(y_length):
cur_left, cur_right = 0, x_length # 当前行的左右边界
# 更新高度
for x_j in range(x_length):
if matrix[y_i][x_j] == '1':
height[x_j] += 1
else:
height[x_j] = 0
# 更新左边界
for x_j in range(x_length):
if matrix[y_i][x_j] == '1':
left[x_j] = max(left[x_j], cur_left)
else:
left[x_j] = 0
cur_left = x_j + 1
# 更新右边界
for x_j in range(x_length - 1, -1, -1):
if matrix[y_i][x_j] == '1':
right[x_j] = min(right[x_j], cur_right)
else:
right[x_j] = x_length
cur_right = x_j
# 计算当前行作为底边的最大矩形面积
for x_j in range(x_length):
max_area = max(max_area, (right[x_j] - left[x_j]) * height[x_j])
return max_area