class Solution:
def maximalSquare(self, matrix):
m, n = len(matrix), len(matrix[0])
# define the DP array
dp = [[0] * n for _ in range(m)]
# start DP
maxArea = float("-inf")
for i in range(m):
for j in range(n):
if i == 0 or j == 0:
dp[i][j] = 1 if matrix[i][j] == "1" else 0
elif matrix[i][j] == "1":
top, left = dp[i - 1][j], dp[i][j - 1]
upper_left = dp[i-1][j-1]
dp[i][j] = min(top, left, upper_left) + 1
maxArea = max(maxArea, dp[i][j])
print(dp)
return maxArea ** 2