Problem of The Day: Maximal Square
Problem Statement
Note:
- problem is hard, cannot solve on my own.
- need to review later
Editorial
Approach 2: Dynamic Programming
class Solution:
def maximalSquare(self, matrix):
rows = len(matrix)
cols = len(matrix[0]) if rows else 0
dp = [[0] * (cols + 1) for _ in range(rows + 1)]
maxsqlen = 0
# for convenience, we add an extra all zero column and row
# outside of the actual dp table, to simpify the transition
for i in range(1, rows + 1):
for j in range(1, cols + 1):
if matrix[i - 1][j - 1] == "1":
dp[i][j] = (
min(min(dp[i][j - 1], dp[i - 1][j]), dp[i - 1][j - 1])
+ 1
)
maxsqlen = max(maxsqlen, dp[i][j])
return maxsqlen * maxsqlen
Approach 3: Better Dynamic Programming
class Solution:
def maximalSquare(self, matrix):
rows = len(matrix)
cols = len(matrix[0]) if rows > 0 else 0
dp = [0] * (cols + 1)
maxsqlen = 0
prev = 0
for i in range(1, rows + 1):
for j in range(1, cols + 1):
temp = dp[j]
if matrix[i - 1][j - 1] == "1":
dp[j] = min(min(dp[j - 1], prev), dp[j]) + 1
maxsqlen = max(maxsqlen, dp[j])
else:
dp[j] = 0
prev = temp
return maxsqlen * maxsqlen