用dp
如果matrices[i][j] == '0' dp[i][j] = 0 continue;
如果是左边界或者上边界 并且 dp[i][j] = 1;
否则 如果左 上 左上三个都是1 dp[i][j] = min(dp[i - 1][j - 1], dp[i][j - 1], dp[i - 1][j]) + 1;
否则 dp[i][j] = 1;
return 最大的dp值的平方;
class Solution { public: int dp[330][330]; int maximalSquare(vector<vector<char>>& matrix) { memset(dp, 0, sizeof(dp)); int n = matrix.size(); int m = matrix[0].size(); int max_v = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if(matrix[i][j] == '0') continue; if(i == 0 || j == 0) dp[i][j] = 1; else { if(matrix[i - 1][j - 1] == '1' && matrix[i - 1][j] == '1' && matrix[i][j - 1] == '1') dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1; else dp[i][j] = 1; } max_v = max(max_v, dp[i][j]); } } return max_v * max_v; } };