361. Bomb Enemy
Input: [["0","E","0","0"],["E","0","W","E"],["0","E","0","0"]]
Output: 3
Explanation: For the given grid,
0 E 0 0
E 0 W E
0 E 0 0
Placing a bomb at (1,1) kills 3 enemies.// Naive 2D DP
int maxKilledEnemies(vector<vector<char>>& grid) { // time: O(m * n); space: O(m * n)
if (grid.empty() || grid[0].empty()) return 0;
int m = grid.size(), n = grid[0].size();
vector<vector<int> > dp(m, vector<int>(n, 0));
// traverse each row twice, from left and from right
for (int i = 0; i < m; ++i) {
int cnt = 0;
for (int j = 0; j < n; ++j) {
if (grid[i][j] == 'W') cnt = 0;
else if (grid[i][j] == 'E') ++cnt;
else dp[i][j] += cnt;
}
cnt = 0; // reset
for (int j = n - 1; j >= 0; --j) {
if (grid[i][j] == 'W') cnt = 0;
else if (grid[i][j] == 'E') ++cnt;
else dp[i][j] += cnt;
}
}
int res = 0;
// traverse each column twice, from top and from bottom
for (int j = 0; j < n; ++j) {
int cnt = 0;
for (int i = 0; i < m; ++i) {
if (grid[i][j] == 'W') cnt = 0;
else if (grid[i][j] == 'E') ++cnt;
else dp[i][j] += cnt;
}
cnt = 0; // reset
for (int i = m - 1; i >= 0; --i) {
if (grid[i][j] == 'W') cnt = 0;
else if (grid[i][j] == 'E') ++cnt;
else {
dp[i][j] += cnt;
res = max(res, dp[i][j]);
}
}
}
return res;
}Last updated