題目描述
給你一個字符串 s,模擬每秒鐘的事件 i:
如果 s[i] == ‘E’,表示有一位顧客進入候診室并占用一把椅子。
如果 s[i] == ‘L’,表示有一位顧客離開候診室,從而釋放一把椅子。
返回保證每位進入候診室的顧客都能有椅子坐的 最少 椅子數,假設候診室最初是 空的 。
示例 1:
輸入:s = “EEEEEEE”
輸出:7
解釋:
每秒后都有一個顧客進入候診室,沒有人離開。因此,至少需要 7 把椅子。
示例 2:
輸入:s = “ELELEEL”
輸出:2
解釋:
假設候診室里有 2 把椅子。下表顯示了每秒鐘等候室的狀態。
秒 事件 候診室的人數 可用的椅子數
0 Enter 1 1
1 Leave 0 2
2 Enter 1 1
3 Leave 0 2
4 Enter 1 1
5 Enter 2 0
6 Leave 1 1
示例 3:
輸入:s = “ELEELEELLL”
輸出:3
解釋:
假設候診室里有 3 把椅子。下表顯示了每秒鐘等候室的狀態。
秒 事件 候診室的人數 可用的椅子數
0 Enter 1 2
1 Leave 0 3
2 Enter 1 2
3 Enter 2 1
4 Leave 1 2
5 Enter 2 1
6 Enter 3 0
7 Leave 2 1
8 Leave 1 2
9 Leave 0 3
提示:
1 <= s.length <= 50
s 僅由字母 ‘E’ 和 ‘L’ 組成。
s 表示一個有效的進出序列。
算法分析
類比上公交車,用ans表示此時車上的人數,每次上一個人ans ++,每次下一個人,ans就–,然后維護最大值count,返回count
完整代碼
class Solution {
public: int minimumChairs(string s) { //維護最大的count即可,類比上公交車 int count=0;//最大值 int ans=0; for(auto i:s) {if(i=='E') ans++; else ans--; count=max(ans,count); }return count; }
};
本篇完!