Полагаю, вы не разбираетесь с угловыми делами. Для меня этот код работает нормально с небольшими изменениями. Кроме того, это будет работать немного медленно.
class Solution:
def maximalSquare(self, matrix: List[List[str]]) -> int:
if not matrix: return 0
m, n, res = len(matrix), len(matrix[0]), 0
for i in range(m):
for j in range(n):
if (i == 0 or j == 0) and (matrix[i][j] == '1'):
res = max(res, 1)
elif int(matrix[i][j]) == 1:
matrix[i][j] = min(int(matrix[i-1][j]), int(matrix[i][j-1]), int(matrix[i-1][j-1])) + 1
res = max(res, matrix[i][j])
return res ** 2
При переборе первой строки или первого столбца формула для dp (i, j) проверяет значения за пределами границ. Сдвиг всего dp вправо и вниз на 1 и добавление отступов 0 к 1-й строке и 1-му столбцу делает формулу работающей без проверки границ.