原题链接:221. 最大正方形
solution: 动态规划
力扣题解
状态表示:dp[i][j]表示以i,j为正方形右下角的最大边长
状态计算: dp[i][j] = min(dp[i - 1][j],dp[i][j - 1],dp[i - 1][j - 1]) + 1
class Solution {
public:
//dp[i][j]:表示以i,j为正方形右下角的最大边长
int maximalSquare(vector<vector<char>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
vector<vector<int>> dp(m + 1, vector<int> (n + 1));
int maxlength = 0; //最大边长
for(int i = 1;i <= m;i++)
for(int j = 1;j <= n;j++){
if(matrix[i - 1][j - 1] == '1') {
dp[i][j] = min(min(dp[i - 1][j],dp[i][j - 1]),dp[i - 1][j - 1]) + 1;
maxlength = max(maxlength,dp[i][j]);
}
}
return maxlength * maxlength;
}
};