动态规划
class Solution:
def maximalSquare(self, matrix):
row, col = len(matrix), len(matrix[0])
dp = [[0] * col for _ in range(row)]
# dp[i][j]表示到i,j为止,最大的正方形边长
ans = 0
for i in range(row):
for j in range(col):
if matrix[i][j] == '1':
if i == 0 or j == 0:
dp[i][j] = 1
else:
dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1
ans = max(ans, dp[i][j])
return ans ** 2
状态dp[i][j]表示到i, j为止能够构成的最大正方形的边长