import java.util.*;
public class Solution {
/**
* 最大正方形
* @param matrix char字符型二维数组
* @return int整型
*/
public int solve (char[][] matrix) {
// write code here
// 一些特殊情况的处理
if (0 == matrix.length || 0 == matrix[0].length) {
return 0;
}
// 动态规划
int rows = matrix.length;
int columns = matrix[0].length;
int[][] dp = new
int[rows][columns]; // 定义一个 dp 数组,其表示的含义是:以 i j 为最右下角的矩阵中,最大的正方形是多少
int max = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
if (matrix[i][j] == '1') {
if (i == 0 || j == 0) {
dp[i][j] = 1;
} else {
dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
}
}
max = Math.max(max, dp[i][j]);
}
}
return max * max;
}
}