# leetcode算法題--最大正方形

`````` dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;
``````

``````int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.empty()) return 0;
int m=matrix.size();
int n=matrix[0].size();
int S=0;
vector<vector<int>> dp(m,vector(n,0));
for(int i=0;i<m;i++){
if(matrix[i][0]=='1') S=1;
dp[i][0]=matrix[i][0]-'0';
}
for(int j=0;j<n;j++) {
if(matrix[0][j]=='1') S=1;
dp[0][j]=matrix[0][j]-'0';
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
if(matrix[i-1][j-1]=='1'&&matrix[i-1][j]=='1'&&matrix[i][j-1]=='1'&&matrix[i][j]=='1'){
dp[i][j]=2;
}
if(dp[i-1][j-1]&&dp[i-1][j]&&dp[i][j-1]&&matrix[i][j]=='1'){
dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
}
S=std::max(S,matrix[i][j]-'0');
S=std::max(S,dp[i][j]*dp[i][j]);
}
}
return S;
}
``````

``````int maximalSquare(vector<vector<char>>& matrix) {
if(matrix.empty()) return 0;
int m=matrix.size();
int n=matrix[0].size();
int S=0;
vector<vector<int>> dp(m+1,vector(n+1,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;
}
S=max(S,dp[i][j]*dp[i][j]);
}
}
return S;
}
``````