字符串压缩编码
2026 华为OD机试真题 7月12日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
给定一个只包含大小写英文字母的字符串,请实现字符串压缩编码功能。
压缩规则:
- 如果字符连续出现次数大于
1,则用字符加上出现次数表示 - 如果字符连续出现次数等于
1,则直接输出字符
2026 华为OD机试真题 7月12日华为OD上机新系统考试真题 100 分题型
输入描述
- 输入一行,包含一个字符串 str(长度 1≤∣str∣≤1000)
- 字符串只包含大小写英文字母
输出描述
输出压缩后的字符串
示例1
输入
aabcccccaaa
输出
a2bc5a3
说明
aa→a2b→b(单个字符不写数字)ccccc→c5aaa→a3
示例2
输入
b
输出
b
说明
- 单个字符直接输出
示例3
输入
AAbB
输出
A2bB
说明
AA→A2b→bB→B
示例4
输入
aaabbbcccaaa
输出
a3b3c3a3
说明
aaa→a3bbb→b3ccc→c3aaa→a3
解题思路
核心思想
字符串压缩编码采用双指针扫描的方式:使用一个慢指针 i 指向当前连续段的起点,一个快指针 j 向后扫描直到字符不同,从而统计连续相同字符的个数。
算法步骤
- 边界处理:若字符串为空,直接返回空串。
- 双指针扫描:
i指向当前连续段的起点,j向右移动直到s[j]与s[i]不同或到达末尾。 - 统计计数:
cnt = j - i即为当前字符的连续出现次数。 - 构建结果:
- 若
cnt > 1,拼接字符 + 数字。 - 若
cnt == 1,只拼接字符。
- 若
- 移动指针:
i = j,继续处理下一段。 - 返回结果:将所有片段拼接为最终字符串。
复杂度分析
- 时间复杂度:O(n),其中 n 为字符串长度,每个字符最多被访问两次。
- 空间复杂度:O(n),用于存储结果
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/694
文章版权归作者所有,未经允许请勿转载。
THE END