2211: 统计道路上的碰撞次数
碰撞次数按下述方式计算:
- 当两辆移动方向 相反 的车相撞时,碰撞次数加
2。 - 当一辆移动的车和一辆静止的车相撞时,碰撞次数加
1。
碰撞发生后,涉及的车辆状态变为'S';首先排除不可能发生碰撞的车:最左侧向左、最右侧向右
在最终状态:
-
所有
R和L在[left, right]区间内都会被"卡住"; -
它们最终会变成 S (静止),++每辆非 S 的车至少参与一次碰撞;++

1.两辆方向相反的车相撞 +2(非S车辆数目为2)
2.状态为'L'or'R'的车与'S'车相撞 +1(非S车辆数目为1)
->统计有多少非 S 的车即可
class Solution {
public:
int countCollisions(string directions) {
int n=directions.size();
int left=0,right=n-1;
// 跳过左边所有 L,跳过右边所有 R
while(left<n && directions[left]=='L') left++;
while(right>=0 && directions[right]=='R') right--;
if(left>right) return 0;
int ans=0;
for(int i=left;i<=right;i++){
if(directions[i]!='S') ans++;
}
return ans;
}
};