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