0361. Bomb Enemy
Last updated
Last updated
**Input:** grid = [["0","E","0","0"],["E","0","W","E"],["0","E","0","0"]]
**Output:** 3**Input:** grid = [["W","W","W"],["0","0","0"],["E","E","E"]]
**Output:** 1class Solution {
public int maxKilledEnemies(char[][] grid) {
// edge cases
if (grid == null || grid.length == 0 || grid[0].length == 0) return 0;
int row = grid.length;
int col = grid[0].length;
// dp memorize cnt
int[][] cnt = new int[row][col];
int[] hori = new int[row];
int[] verti = new int[col];
for (int r = 0; r < row; r++) {
for (int c = 0; c < col; c++) {
if (grid[r][c] == '0') {
cnt[r][c] = hori[r] + verti[c];
}
else if (grid[r][c] == 'W') {
hori[r] = 0;
verti[c] = 0;
}
else {
hori[r]++;
verti[c]++;
}
}
}
// 2nd pass, backward, get max
hori = new int[row];
verti = new int[col];
int max = 0;
for (int r = row-1; r >= 0; r--) {
for (int c = col-1; c >= 0; c--) {
if (grid[r][c] == '0') {
cnt[r][c] += hori[r] + verti[c];
max = Math.max(max, cnt[r][c]);
}
else if (grid[r][c] == 'W') {
hori[r] = 0;
verti[c] = 0;
}
else {
hori[r]++;
verti[c]++;
}
}
}
return max;
}
}
/*
2 pass
*/