美团笔试 美团后端笔试 0315

笔试时间:2025年03月15日

历史笔试传送门:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

题目:小美的文本文件

小美有一个由大小写字母混合构成的加密字符串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 = "";
        for (size_t i = 0; i < s.length(); ++i) {
            char c = s[i];
            if (c == 'R') {
                reverse(buffer.begin(), buffer.end());
            } else if (c == 'Z') {
                if (i > 0) {
                    char prev = s[i - 1];
                    if (prev == 'R') {
                        reverse(buffer.begin(), buffer.end());
                    } else if (!buffer.empty()) {
                        buffer.pop_back();
                    }
                }
            } else {
                buffer += 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 in range(len(s)):
        c = s[i]
        if c == 'R':
            buffer.reverse()
        elif c == 'Z':
            if i > 0:
                prev = s[i - 1]
                if prev == 'R':
                    buf

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

04-10 10:46
学而思_HR
学而思
|
校招
|
26个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务