输入01矩阵,求子矩阵为正方形,其中全为1的最大子矩阵的面积
矩阵dp,dp[i][j]表示以(i,j)为右下角的最大正方形子矩阵的长度
如果a[i][j]==1,dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1
要先处理第一行和第一列
时间N*M
1 class Solution { 2 public: 3 int maximalSquare(vector<vector<char> >& matrix) { 4 int m=matrix.size(); 5 if(m==0) return 0; 6 int n=matrix[0].size(); 7 int dp[m+1][n+1]; 8 memset(dp,0,sizeof(dp)); 9 int ans=0; 10 for(int i=0;i<n;i++){ 11 if(matrix[0][i]=='1'){ 12 dp[0][i]=1; 13 ans=1; 14 } 15 } 16 for(int i=0;i<m;i++){ 17 if(matrix[i][0]=='1'){ 18 dp[i][0]=1; 19 ans=1; 20 } 21 } 22 for(int i=1;i<m;i++){ 23 for(int j=1;j<n;j++){ 24 if(matrix[i][j]=='1') dp[i][j]=min(min(dp[i-1][j-1],dp[i-1][j]),dp[i][j-1])+1; 25 ans=max(ans,dp[i][j]); 26 } 27 } 28 return ans*ans; 29 } 30 };