题目描述
阿邱最近开了家餐厅。阿邱想了解某一时段至少有多少不同人出入餐厅。阿邱就雇佣了一个人,呆在餐厅门口,有人进入餐厅,他就在纸上记下+,有人出餐厅,他就在纸上记下-。
假设同一时间没有两个人同时进入或出餐厅;也假设最初的时候餐厅中有足够多的人。问,这段时间里,至少有多少人出入餐厅。(不同人出入的顺序是随意的,一个人可以反复出入。)
输入
2
+-+-+
---
输出
1
3
思路
第一反应是用栈,记录最大长度,发现过不了。后来又想到找最长的连加或者连减串,发现还是过不了,后经同学提醒了一组刁钻的用例
---+++-+++
输出为5
我的代码好像过不了这个用例,于是只好换了一种思路。
要寻找最少人数,本质上是进与出左右拉扯,两边端点的距离即是最少人数。
代码
#include<stdio.h>
#include<string.h>
int main() {int m, i, add, sub, num;char ch;scanf("%d", &m);getchar();for (i = 0;i < m;i++) {add = sub = 0;num = 0;while ((ch = getchar()) != '\n') {if (ch == '+') {num++;if (num > add)add = num;}else {num--;if (num < sub)sub = num;}}printf("%d\n", add - sub);}
}