2211. 统计道路上的碰撞次数

leetcode-2211. 统计道路上的碰撞次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
int countCollisions(string directions) {
int result = directions.size();
for(int i = directions.size() - 1; i >= 0; i--)
{
if(directions[i] == 'R')
result--;
else break;
}
for(int i = 0; i < directions.size(); i++)
{
if(directions[i] == 'L')
result--;
else break;
}
for(char ch : directions)
{
if(ch == 'S')
result--;
}

return result;
}
};

一开始的思路是,搞一个栈,暂时不相撞的车先存在栈里面。遇到相撞的情况,就把要撞的车从里面弹出来。

后来发现,要讨论的相撞的情况太多了。

那么可以逆向思维,不相撞的情况有哪些?仔细思考后发现,其实只有第二个示例中的两种情况:

  1. 最左面有向左的车
  2. 最右面有向右的车

确定了相撞的情况,但是这还不是最终想求的答案。

有停止的车参与的相撞,只算一次,所以应该额外计算S的数量。