最大正方形
代表以
为右下角能够构成的最大正方形的边长。
DP方程:
class Solution {
public:
int maximalSquare(vector<vector<char>>& a) {
if(a.size()==0 || a[0].size()==0) return 0;
int m = a.size(), n = a[0].size(),ans = 0;
vector<vector<int>> dp(m+1,vector<int>(n+1,0));
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(a[i-1][j-1]=='0'){
dp[i][j] = 0;
}else{
int s1 = dp[i-1][j-1];
int s2 = dp[i-1][j];
int s3 = dp[i][j-1];
dp[i][j] = min(min(s1,s2),s3)+1;
}
ans = max(ans,dp[i][j]*dp[i][j]);
}
}
// for(int i=1;i<=m;i++){
// for(int j=1;j<=n;j++){
// cout<<dp[i][j]<<" ";
// }
// cout<<endl;
// }
return ans;
}
};