字符串压缩编码

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

说明

  • aaa2
  • bb(单个字符不写数字)
  • cccccc5
  • aaaa3

示例2

输入

b

输出

b

说明

  • 单个字符直接输出

示例3

输入

AAbB

输出

A2bB

说明

  • AAA2
  • bb
  • BB

示例4

输入

aaabbbcccaaa

输出

a3b3c3a3

说明

  • aaaa3
  • bbbb3
  • cccc3
  • aaaa3

解题思路

核心思想

字符串压缩编码采用双指针扫描的方式:使用一个慢指针 i 指向当前连续段的起点,一个快指针 j 向后扫描直到字符不同,从而统计连续相同字符的个数。

算法步骤

  1. 边界处理:若字符串为空,直接返回空串。
  2. 双指针扫描i 指向当前连续段的起点,j 向右移动直到 s[j]s[i] 不同或到达末尾。
  3. 统计计数cnt = j - i 即为当前字符的连续出现次数。
  4. 构建结果
    • cnt > 1,拼接 字符 + 数字
    • cnt == 1,只拼接字符。
  5. 移动指针i = j,继续处理下一段。
  6. 返回结果:将所有片段拼接为最终字符串。

复杂度分析

  • 时间复杂度:O(n),其中 n 为字符串长度,每个字符最多被访问两次。
  • 空间复杂度:O(n),用于存储结果
THE END