class Solution {
public:
/**
用另一个矩阵,记录以这个位置为右下角的最大正方形的边得数量,动态规划
*/
int solve(vector<vector<char> >& matrix) {
if(matrix.size() == 0){
return 0;
}
vector< vector<int> > dp( matrix.size()+1, vector<int>(matrix[0].size()+1, 0)); //因为有边界情况,左边和上边进行扩展一行,初始化边为0;不用再进行边界分类讨论;
int maxlen=0;
for(int i=1; i<dp.size(); i++){
for(int j=1; j<dp[0].size(); j++){
if(matrix[i-1][j-1]=='0'){ //dp数组和matrix的位置关系;
dp[i][j]=0;
}else{
dp[i][j] = min( dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1]) )+1;
maxlen = max(maxlen, dp[i][j]);
}
}
}
return maxlen*maxlen;
}
};