C++程序:检查客人入住记录后查找房间状态
假设我们有一个字符串 S,其中包含 'L'、'R' 和数字 0 到 9。假设有一家酒店有 10 个房间,从左到右编号为 0 到 9。酒店有两个入口——一个在左侧,另一个在右侧。当顾客从左侧入口进入酒店时,他们会得到最靠近左侧入口的空房间。类似地,当顾客从右侧入口进入酒店时,他们会得到最靠近右侧入口的空房间。但我们丢失了房间分配列表。但我们记得所有顾客:顾客何时到达、从哪个入口到达以及何时离开酒店。最初酒店是空的。我们必须从记忆中恢复房间分配列表。在 S 中,'L' 表示顾客从左侧入口进入,如果为 'R',则表示他/她从右侧入口进入,数字 d 表示顾客离开房间 d。我们必须返回房间状态。一个长度为 10 的字符串,其中 0 表示房间为空,否则表示房间已占用。
因此,如果输入类似于 S = "LLRL1RL1",则输出将为 "1010000011",因为
首先,所有房间都是空的。状态 0000000000。
- L - 顾客从左侧入口进入酒店。状态 1000000000。
- L - 来自左侧入口的顾客。状态 1100000000。
- R - 来自右侧入口的顾客。状态 1100000001。
- L - 来自左侧入口的顾客。状态 1110000001。
- 1 - 房间 1 的顾客离开。状态 1010000001。
- R - 来自右侧入口的顾客。状态 1010000011。
- L - 来自左侧入口的顾客。状态 1110000011。
- 1 - 房间 1 的顾客离开。状态 1010000011。
步骤
为了解决这个问题,我们将遵循以下步骤:
n := size of S a := "0000000000" for initialize i := 0, when i < n, update (increase i by 1), do: if S[i] is same as 'L', then: set left most 0 in a to 1 if S[i] is same as 'R', then: set right most 0 in a to 1 Otherwise set S[i]th place in a to 0 return a
示例
让我们看看以下实现以更好地理解:
#include <bits/stdc++.h>
using namespace std;
string solve(string S) {
int n = S.size();
string a = "0000000000";
for (int i = 0; i < n; i++) {
if (S[i] == 'L')
a[a.find('0')] = '1';
if (S[i] == 'R')
a[a.rfind('0')] = '1';
else
a[S[i] - '0'] = '0';
}
return a;
}
int main() {
string S = "LLRL1RL1";
cout << solve(S) << endl;
}输入
"LLRL1RL1"
输出
1010000011
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP