菜鸟的Leetcode(4)

系列文章目录

第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的解题步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值