最大正方形
高刷题
dp里存的是最大的正方形边长
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int result = 0;
int m = matrix.size() , n = matrix[0].size();
vector<vector<int>> dp(m,vector<int>(n,0));
for(int i=0 ; i<m ; i++)
{
if(matrix[i][0] == '1') dp[i][0] = 1;
if(dp[i][0] > result) result = dp[i][0];
}
for(int j=0 ; j<n ; j++)
{
if(matrix[0][j] == '1') dp[0][j] = 1;
if(dp[0][j] > result) result = dp[0][j];
}
for(int i=1; i<m ;i++)
{
for(int j=1 ; j<n ; j++)
{
if(matrix[i][j] == '1')
{
dp[i][j] = min( dp[i-1][j-1] , min( dp[i-1][j],dp[i][j-1])) + 1;
if(dp[i][j] > result) result = dp[i][j];
}
}
}
return result*result;
}
};