मान लीजिए कि हमारे पास 'L', 'R' के साथ एक स्ट्रिंग S है और 0 से 9 तक के अंक हैं। मान लीजिए कि 10 कमरों वाला एक होटल है, जिनकी संख्या 0 से 9 तक, बाएं से दाएं है। होटल में दो प्रवेश द्वार हैं- एक बाईं ओर से, और दूसरा दाईं ओर से। जब कोई ग्राहक बाएं प्रवेश द्वार से होटल में आता है, तो उसे बाएं प्रवेश द्वार के सबसे निकट एक खाली कमरा मिलता है। इसी तरह, जब कोई ग्राहक होटल में दाहिने प्रवेश द्वार से आता है, तो उन्हें दाहिने प्रवेश द्वार के सबसे निकट एक खाली कमरा मिलता है। लेकिन हमने रूम असाइनमेंट लिस्ट खो दी है। लेकिन हम सभी ग्राहकों को याद करते हैं:जब कोई ग्राहक आया, किस प्रवेश द्वार से, और जब उन्होंने होटल छोड़ा। शुरू में होटल खाली था। हमें मेमोरी से रूम असाइनमेंट लिस्ट को रिकवर करना है। S में, 'L' का अर्थ है कि व्यक्ति बाईं ओर से आया है, यदि यह 'R' है तो वह दाईं ओर से आया है, और अंक d ग्राहक के कक्ष d को दर्शाता है। हमें कमरे की स्थिति वापस करनी होगी। एक डोरी जिसकी लंबाई 10 है और जो 0 है, का अर्थ है कि कमरा खाली है, अन्यथा वह भरा हुआ है।
इसलिए, यदि इनपुट S ="LLRL1RL1" जैसा है, तो आउटपुट "1010000011" होगा, क्योंकि
सबसे पहले, सभी कमरे खाली हैं। स्थिति 0000000000.
एल - ग्राहक होटल में बाएं प्रवेश द्वार से आता है। स्थिति 100000000.
एल - बाएं प्रवेश द्वार से ग्राहक। स्थिति 110000000.
आर - दाहिने प्रवेश द्वार से ग्राहक। स्थिति 110000001.
एल - बाएं प्रवेश द्वार से ग्राहक। स्थिति 111100001.
1 - ग्राहक कमरे में 1 छोड़ देता है। स्थिति 10100000001.
आर - दाहिने प्रवेश द्वार से ग्राहक। स्थिति 1010000011.
एल - बाएं प्रवेश द्वार से ग्राहक। स्थिति 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