class Solution {public int maximalRectangle(char[][] matrix) {if (matrix.length == 0) return 0;int maxarea = 0;//二維數組int[][] dp = new int[matrix.length][matrix[0].length];for(int i = 0; i < matrix.length; i++){ //豎著for(int j = 0; j < matrix[0].length; j++){ //橫著if (matrix[i][j] == '1'){// compute the maximum width and update dp with it//橫著的以j下標結束的最大連續是1的長度dp[i][j] = j == 0? 1 : dp[i][j-1] + 1;//這是最大寬度int width = dp[i][j];// compute the maximum area rectangle with a lower right corner at [i, j]for(int k = i; k >= 0; k--){//dp[k][j]) 對應豎著的最大寬度width = Math.min(width, dp[k][j]);maxarea = Math.max(maxarea, width * (i - k + 1));}}}} return maxarea;}
}