华为OD机考双机位C卷 - 字符串摘要(Java & Python& JS & C_C++ & GO )
字符串摘要
2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷
华为OD机试双机位C卷真题目录点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)
题目描述
给定一个字符串的摘要算法,请输出给定字符串的摘要值
- 去除字符串中非字母的符号。
- 如果出现连续字符(不区分大小写) ,则输出:该字符 (小写) + 连续出现的次数。
- 如果是非连续的字符(不区分大小写),则输出:该字符(小写) + 该字母之后字符串中出现的该字符的次数
- 对按照以上方式表示后的字符串进行排序:字母和紧随的数字作为一组进行排序,数字大的在前,数字相同的,则按字母进行排序,字母小的在前。
输入描述
一行字符串,长度为[1,200]
输出描述
摘要字符串
用例1
输入
aabbcc
输出
a2b2c2
用例2
输入
bAaAcBb
输出
a3b2b2c0
说明
bAaAcBb:
第一个b非连续字母,该字母之后字符串中还出现了2次(最后的两个Bb) ,所以输出b2
a连续出现3次,输出a3,
c非连续,该字母之后字符串再没有出现过c,输出c0
Bb连续2次,输出b2
对b2a3c0b2进行排序,最终输出a3b2b2c0
解题思路
本题的核心是字符串的预处理、分段统计与排序。题目要求我们从一个包含各种字符的字符串中提取摘要,具体过程可以分为以下三个主要步骤:
1. 预处理
首先,我们需要清理输入字符串。
- 去除非字母符号:题目只关心字母,因此需要过滤掉所有非字母字符。
- 大小写统一:题目说明不区分大小写,为了方便处理,可以将所有字母统一转换为小写(或大写)。
- 全局统计:我们需要统计每个字母在整个字符串中出现的总次数。这可以通过一个长度为 128 的数组(对应 ASCII 码)或哈希表来实现。这个统计数据对于后续计算“非连续字符”的摘要值至关重要。
2. 生成摘要片段
接下来,我们需要遍历处理后的纯字母字符串,识别出一段段连续的字符序列。
- 连续字符处理:如果我们发现当前字符与前一个字符相同,说明是连续出现的,此时我们只需增加当前段的计数器
repeat。 - 非连续字符处理(或者连续段结束时):
- 如果当前段的长度
repeat > 1:根据题目规则 2,摘要值为字符 + 连续次数。 - 如果当前段的长度
repeat == 1:根据题目规则 3,摘要值为字符 + 该字符之后出现的次数。- 如何计算“之后出现的次数”?我们可以利用步骤 1 中的全局统计。每当我们遍历过一个字符,就将其对应的全局计数减 1。那么,当我们处理到一个非连续字符时,其全局计数器中剩余的值正是它在后续字符串中出现的次数。
- 如果当前段的长度
- 边界处理:为了方便处理最后一个字符段,可以在字符串末尾添加一个特殊字符(如空格),或者在循环结束后单独处理最后一段。
3. 排序与输出
所有的摘要片段生成后,需要按照特定规则进行排序:
- 排序规则:
- 数字优先:按照片段中的数字(即出现次数)从大到小排序。
- 字母次之:如果数字相同,则按照字母的 ASCII 码从小到大排序。
- 最后,将排序好的片段拼接起来,即为最终的摘要字符串。
这个过程结合了字符串扫描、哈希计数和自定义排序,逻辑清晰且易于实现。
浙公网安备 33010602011771号