系列文章目录
第1章 求和
第2章 回文
第3章 字符串数组
第4章 栈的最小容量or模拟
一、题目
给你一个字符串 s,`模拟`每秒钟的事件 i:
如果 s[i] == 'E',表示有一位顾客进入候诊室并占用一把椅子。
如果 s[i] == 'L',表示有一位顾客离开候诊室,从而释放一把椅子。
返回保证每位进入候诊室的顾客都能有椅子坐的 最少 椅子数,假设候诊室最初是 `空的` 。
提示:
1 <= s.length <= 50
s 仅由字母 'E' 和 'L' 组成
s 表示一个有效的`进出`序列
(Leetcode:3168)
二、知识点
1.栈
三、解题步骤
1.思路
<h7>首先都是空的,有人 =='E'就比较位置or增加位置并给信息,=='L'离开再清空信息</h7>
2.实现
class Solution {
public:
int minimumChairs(const string& s) {
int sum = 0; // 初始化最大值变量为0
int temp = 0; // 初始化临时变量为0,用于记录当前座位数
int i = 0; // 初始化索引变量i为0
while (i < s.size()) { // 遍历字符串s
if (s[i] == 'E') { // 如果当前字符是'E',表示有人离开
temp += 1; // 增加一个座位
} else { // 否则,表示有人到达
temp -= 1; // 减少一个座位
}
sum = max(sum, temp); // 更新最大值变量为当前座位数和之前的最大值中的较大者
i++; // 移动到下一个字符
}
return sum; // 返回最大值,即需要的最大座位数
}
};
3.其他
有病法
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> stack;
char str[51]; //char str[] = "ELELE";
cin >> str;
int size = strlen(str);
for (int i = 0; i < size; i++) {
if (str[i] == 'E')
{stack.push_back(i);}
else if
(str[i] == 'L')
{
if (!stack.empty())
{ stack.pop_back(); }
else
{
return false;
}
}
}
return stack.size();
}
总结:
以上就是今天要讲的内容,本文仅仅简单介绍了Leetcode编号:3168的解题步骤。