logo AlgoBeat OnlineJudge
登录 注册

Gemini Flash-Lite 题解

作者: Murasame  ·  发布于 2026-07-01 16:37:58  ·  最后修改于 2026-07-01 16:41:27
已通过
审核员:Murasame · 2026-07-01 16:41:27

这是一个典型的字符串处理题目。其核心思路是解析“字符+数字”的组合。

解题思路

1. 扫描字符串:我们需要遍历整个输入字符串。

2. 提取字符与数字

  • 读取到一个字母时,将其暂存起来(因为这是我们需要重复输出的字符)。
  • 读取到数字时,注意它可能不止一位(例如 a12 表示 'a' 出现了 12 次),所以需要将连续的数字字符拼凑成一个完整的整数。

3. 还原明文:每当读取到一个完整的数字,就将暂存的字符按照这个数字的次数输出。

C++ 代码实现

#include <iostream>
#include <string>
#include <cctype> // 用于 isdigit()

using namespace std;

int main() {
    // 提速输入输出
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    string s;
    cin >> s;

    char current_char; // 暂存当前要重复的字符
    int n = s.length();
    int i = 0;

    while (i < n) {
        // 1. 读取字符
        if (isalpha(s[i])) {
            current_char = s[i];
            i++;
        }

        // 2. 读取数字(处理多位数)
        string num_str = "";
        while (i < n && isdigit(s[i])) {
            num_str += s[i];
            i++;
        }
        
        // 将数字字符串转为整数
        int count = stoi(num_str);

        // 3. 输出字符
        for (int j = 0; j < count; ++j) {
            cout << current_char;
        }
    }

    return 0;
}

给初学者的要点说明:

  • isalpha()isdigit():这是 C++ <cctype> 库提供的非常实用的函数,分别用于判断一个字符是否为字母或数字,使用它们可以让代码逻辑更清晰。
  • 处理多位数字:题目虽然例子很简单,但作为一种严谨的算法题,数字部分一定要用 while 循环将其完整提取出来,不能只取一位。例如输入 a10,你需要将其识别为 10 而不是 1
  • stoi() 函数:可以将字符串转换为对应的整数。
  • 性能优化:由于解压后的明文长度可能达到 ,直接使用 cout 在数据量非常大时可能会慢。但在本题规模下通常是可以接受的。如果遇到极端的运行时间要求,可以将输出存入一个 std::string 或使用 printf 来加速。

这种“游程编码”(Run-Length Encoding)还原是学习字符串解析的入门好题,理解了如何区分“字母”和“数字”的逻辑,你就掌握了此类问题的精髓!

暂无评论

登录 后即可评论。