美团笔试 美团后端笔试 0315
笔试时间:2025年03月15日
历史笔试传送门:
第一题
题目:小美的文本文件
小美有一个由大小写字母混合构成的加密字符串s,你需要按照以下准则将其解密得到字符串t。初始时字符串t为空,对于字符串s的每一个字符:如果s的第i个字符为'R'(保证至多出现一次),则反转字符串t。如果s的第i个字符为'Z'(保证至多出现一次),则撤销上一步操作,具体地:如果上一步为‘R’,则取消反转;如果上一步为其他字符,删除这个字符;上一步为空,则跳过这个操作;其他情况,直接将这个字符添加到字符串t的末尾。请你直接输出解密完成后的字符串t。
输入描述
第一行输入T(1 <= T <= 2e5),表示有T个测试用例。
然后接下来T行,每一行输入一个字符串s(1 <= len(s) <= 2e5)
所有字符串长度之和不超过1e6。
输出描述
输出最终的解密字符串t。
样例输入
2
meRDZ
DameDame
样例输出
em
DameDame
参考题解
模拟
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
string s;
cin >> s;
string buffer;
int len = s.length();
for (int i = 0; i < len; ++i) {
char c = s[i];
if (c == 'R') {
reverse(buffer.begin(), buffer.end());
} else if (c == 'Z') {
if (i - 1 >= 0) {
char tmp = s[i - 1];
if (tmp == 'R') {
reverse(buffer.begin(), buffer.end());
} else {
if (!buffer.empty()) {
buffer.pop_back();
}
}
}
} else {
buffer.push_back(c);
}
}
cout << buffer << endl;
}
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.*;
public class Main {
public static void main(String[] args) throws InterruptedException {
Scanner scanner=new Scanner(System.in);
int T= scanner.nextInt();
while (T!=0){
T--;
String s= scanner.next();
int len=s.length();
StringBuffer stringBuffer=new StringBuffer();
for (int i=0;i<len;i++){
char c = s.charAt(i);
if (c == 'R') {
stringBuffer.reverse();
} else if (c == 'Z') {
if (i - 1 >= 0) {
char tmp = s.charAt(i - 1);
if (tmp == 'R') {
stringBuffer.reverse();
} else {
int buff_len = stringBuffer.length();
stringBuffer.deleteCharAt(buff_len - 1);
}
}
} else {
stringBuffer.append(c);
}
}
System.out.println(stringBuffer);
}
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
T = int(input())
for _ in range(T):
s = input()
buffer = []
for i, c in enumerate(s):
if c == 'R':
buffer.reverse()
elif c == 'Z':
if i - 1 >= 0:
tmp = s[i - 1]
if tmp == 'R':
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

