B站视频地址:https://www.bilibili.com/video/BV1hB4y15765/?vd_source=a0bea6f5def58dc5711647a825ed97b6
class Solution {
public int maxKilledEnemies(char[][] grid) {
int row = grid.length;
int col = grid[0].length;
// 可以炸死的最多敌人个数
int max = 0;
//为了防止空位上面的敌人没有被炸死
int[] colCount = new int[col];
for (int i = 0; i < row; i++) {
// 为了防止空位左边的敌人没有被炸死
int rowCount = 0;
for (int j = 0; j < col; j++) {
if (grid[i][j] == '0') {
// 初始化为当前空位可以炸死的敌人个数
int total = rowCount + colCount[j];
// 遍历炸弹所在行的可以炸死的敌人个数
for (int k = j + 1; k < col && grid[i][k] != 'W'; k++) {
if (grid[i][k] == 'E') {
total++;
}
}
// 遍历炸弹所在列的可以炸死的敌人个数
for (int k = i + 1; k < row && grid[k][j] != 'W'; k++) {
if (grid[k][j] == 'E') {
total++;
}
}
max = Math.max(max, total);
} else if (grid[i][j] == 'W') {
// 炸弹不能炸死墙体左边的敌人
rowCount = 0;
// 炸弹不能炸死墙体上面的敌人
colCount[j] = 0;
} else {
rowCount++;
colCount[j]++;
}
}
}
return max;
}
}