classSolution{public:intmaximalSquare(vector<vector<char>>& matrix){
vector<vector<int>>dp(matrix.size()+1,vector<int>(matrix[0].size()+1,0));int ret =0;for(int i =1; i <= matrix.size();++i){for(int j =1; j <= matrix[0].size();++j){if(matrix[i -1][j -1]=='0')continue;int minaround =min(dp[i -1][j],min(dp[i][j -1], dp[i -1][j -1]))+1;
dp[i][j]= minaround;
ret =max(ret, minaround * minaround);}}return ret;}};
代码实现(四刷自解 DAY 8 Golang)
funcmin(x, y int)int{if x <= y {return x
}else{return y
}}funcmax(x, y int)int{if x >= y {return x
}else{return y
}}funcmaximalSquare(matrix [][]byte)int{
ret :=0
dp :=make([][]int,len(matrix)+1)for i :=0; i <=len(matrix); i++{
dp[i]=make([]int,len(matrix[0])+1)}for i :=1; i <=len(matrix); i++{for j :=1; j <=len(matrix[0]); j++{if matrix[i -1][j -1]=='1'{
dp[i][j]=1
otherdp :=min(dp[i -1][j],min(dp[i][j -1], dp[i -1][j -1]))if dp[i][j]==1{
dp[i][j]=max(dp[i][j], otherdp +1)
ret =max(ret, dp[i][j])}}}}return ret * ret
}