import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 最大正方形
* @param matrix char字符型二维数组
* @return int整型
[1,0,1,0,0],
[1,0,1,1,1],
[1,1,1,1,1],
[1,0,0,1,0]
*/
public int solve (char[][] matrix) {
if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return 0 ;
//f[i][j]表示以matrix[i][j]为右下角的正方形的 边长
int[][] f = new int[matrix.length][matrix[0].length] ;
int maxLen = 0 ;
for(int i = 0 ; i < f.length ; i ++) {
for(int j = 0 ; j < f[0].length ; j ++) {
if(matrix[i][j] == '0') continue ;
if(i == 0 || j == 0) {
f[i][j] = 1;
} else {
//转移方程,从 (上,左,上左) 这三个位置转移过来
f[i][j] = Math.min(Math.min(f[i-1][j] , f[i][j - 1]) , f[i-1][j-1]) + 1 ;
}
if(f[i][j] > maxLen) maxLen = f[i][j] ;
}
}
return maxLen * maxLen ;
}
}