刷题打卡 | 豆包MarsCode AI 刷题

51 阅读2分钟

145字符串解压缩

解题思路

1.     遍历字符串:从头到尾遍历输入字符串。

2.     识别字母和数字:当遇到字母时,记录下来;当遇到数字时,记录下该字母需要重复的次数。

3.     构建解压后的字符串:根据记录的信息,构建解压后的字符串。

详细步骤

1.     初始化结果字符串:创建一个空字符串 result,用于存储解压后的结果。

2.     遍历输入字符串:使用 for 循环从头到尾遍历输入字符串 s。

3.     识别字母:使用 isalpha 函数判断当前字符是否是字母。

o   如果是字母,记录该字母 ch,并初始化重复次数 count 为 1。

4.     识别数字:检查下一个字符是否是数字,如果是,则进入一个 while 循环,继续读取后续的数字字符,直到遇到非数字字符。

o   使用 stoi 函数将读取的数字字符串转换为整数,并更新 count。

o   更新 i 的值以跳过已经读取的数字字符。

5.     构建解压后的字符串:使用 result.append(count, ch) 将字母 ch 重复 count 次加入结果字符串 result

    string result;
    for (size_t i = 0; i < s.length(); ++i) {
        if (isalpha(s[i])) {
            // 当前字符是字母
            char ch = s[i];
            int count = 1; // 默认重复次数为1
            // 检查接下来的字符是否是数字
            if (i + 1 < s.length() && isdigit(s[i + 1])) {
                int num_start = i + 1;
                while (i + 1 < s.length() && isdigit(s[i + 1])) {
                    i++;
                }
                count = stoi(s.substr(num_start, i - num_start + 1)); // 将子字符串转换为数字
            }
            // 将字母重复count次加入结果字符串
            result.append(count, ch);
        }
    }
    return result;
}

 

关键点解释

1.     字符分类

o   isalpha 函数用于判断当前字符是否是字母。

o   isdigit 函数用于判断当前字符是否是数字。

2.     数字处理

o   使用 while 循环读取多位数字。

o   使用 stoi 函数将读取的数字字符串转换为整数。

3.     字符串构建

o   使用 result.append(count, ch) 方法将字母 ch 重复 count 次加入结果字符串 result。

常见错误及解决方法

1.     数字处理错误

o   如果数字可能超过一位,需要使用 while 循环读取所有连续的数字字符。

o   使用 stoi 函数将读取的数字字符串转换为整数。

2.     索引越界

o   在检查下一个字符是否是数字时,确保不会越界,即 i + 1 < s.length()。

3.     默认重复次数

o   如果字母后面没有数字,默认重复次数为 1。

总结

通过以上步骤,我们可以有效地解压一个特殊方式压缩的字符串。关键在于正确地识别字母和数字,并处理多位数字的情况。