两种解法:
1.暴力解法,时间复杂度O((m*n)^2)
2.动态规划,dp[i][j]=min(dp[i−1][j],dp[i−1][j−1],dp[i][j−1])+1.
JAVA
lass Solution { public int maximalSquare(char[][] matrix) { int row = matrix.length; int col = row > 0 ? matrix[0].length : 0; int maxsqlen = 0; for(int i = 0; i < row; i++){ for(int j = 0; j < col; j++){ if(matrix[i][j] == '1'){ int sqlen = 1; boolean flag = true; while(sqlen + i < row && sqlen + j < col && flag){ for(int k = j; k <= sqlen + j; k++){ if(matrix[i+sqlen][k] == '0'){ flag = false; break; } } for(int k = i; k <= sqlen + i; k++){ if(matrix[k][j+sqlen] == '0'){ flag = false; break; } } if(flag) sqlen++; } if(maxsqlen < sqlen) maxsqlen = sqlen; } } } return maxsqlen*maxsqlen; } }
class Solution { public int maximalSquare(char[][] matrix) { int row = matrix.length; int col = row > 0 ? matrix[0].length : 0; int[][] dp = new int[row+1][col+1]; int maxsqlen = 0; for(int i = 1; i <= row; i++){ for(int j = 1; j <= col; j++){ if(matrix[i-1][j-1] == '1'){ dp[i][j] = Math.min(Math.min(dp[i][j-1], dp[i-1][j]),dp[i-1][j-1])+1; maxsqlen = Math.max(maxsqlen, dp[i][j]); } } } return maxsqlen*maxsqlen; } }