class Solution:
def maximalRectangle(self, matrix: List[List[str]]) -> int:
if not matrix or not matrix[0]:
return 0
row, col = len(matrix), len(matrix[0])
height = [0] * col
left = [0] * col
right = [col] * col # điểm phải xa nhất mặc định là = len of col
max_area = 0
for i in range(row):
currentLeft, currentRight = 0, col
for j in range(col):
if matrix[i][j] == '1':
height[j] += 1
else:
height[j] = 0
for j in range(col):
if matrix[i][j] == '1':
left[j] = max(left[j], currentLeft) # tracking điểm 0
else:
left[j] = 0
currentLeft = j + 1 # skip current left
for j in range(col - 1, -1, -1): # -1 including index 0
if matrix[i][j] == '1':
right[j] = min(right[j], currentRight) # righ gan nhat
else:
right[j] = col # reset right
currentRight = j # col = 5, j = 4, ko cần j - 1
for j in range(col):
max_area = max(max_area, (right[j] - left[j])*height[j])
return max_area