class Solution {
public int maximalSquare(char[][] matrix) {
int n = matrix.length, m = matrix[0].length;
int max = 0;
if(n == 0 || m == 0) {
return 0;
}
// dp(i, j) represents the length of the square
// whose lower-right corner is located at (i, j)
// dp(i, j) = min{ dp(i-1, j-1), dp(i-1, j), dp(i, j-1) }
int[][] dp = new int[n + 1][m + 1];//初始默认值为0
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if(matrix[i - 1][j - 1] == '1') {
dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1])) + 1; //Math.min(int, int)只能是2个整数
max = Math.max(max, dp[i][j]);
}
}
}
return max * max;
}
}
179. Largest Number
class Solution {
public String largestNumber(int[] nums) {
List<String> list = new ArrayList();
for(int num : nums) {
list.add(String.valueOf(num));
}
// 范型必须写
list.sort(new Comparator<String>() {
@Override
public int compare(String a , String b) {
String s1 = a + b;
String s2 = b + a;
return s2.compareTo(s1); // 顺序不能反
}
});
StringBuilder res = new StringBuilder();
for (String str : list) {
res.append(str);
}
if (res.charAt(0) == '0') {
return "0";
}
return res.toString();
}
}
2027. Minimum Moves to Convert String
class Solution {
public int minimumMoves(String s) {
// 只要遇到X,相当于要消除X那么必须连续三个字符消除,所以i移动三步,
// 因为for循环里面i++,所以i += 2;遇到O则i增加1;
int res = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'X') {
i += 2;
res++;
} else if (s.charAt(i) == 'O') {
continue;
}
}
return res;
}
}