采取动态规划算法,利用一个(m+1)*(n+1)的数组来记录至各个元素位置可能存在的最大的符合条件的矩形边长。这个长度由dp[i-1][j-1],dp[i][j-1],dp[i-1][j]的最小值决定。(当且仅当这三个位置及dp[i][j]对应的matrix的点符合条件时才可++)
时间代价是O(m*n)的
public class Solution {
public int maximalSquare(char[][] matrix) {
if( matrix==null || matrix.length==0 || matrix[0].length==0 )
{
return 0;
}
int a = matrix.length,b=matrix[0].length;
int[][] dp = new int[a+1][b+1];
int rt = 0;
for( int i=1;i<=a;i++ )
{
for( int j=1;j<=b;j++)
{
if( matrix[i-1][j-1]=='1' )
{
dp[i][j] = Math.min( dp[i-1][j-1],Math.min(dp[i][j-1],dp[i-1][j]) )+1;
rt = Math.max(rt,dp[i][j]);
}
}
}
return rt*rt;
}
}