小红需要压缩一个由八组四位小写十六进制数组成的数字标识符,各组以冒号分隔。 首先,可以把一段由同一个“同位字符组”重复组成的连续区间替换成 `**`。同位字符组是四个字符完全相同的组,例如 `0000`、`aaaa`。长度为一的区间也可以替换。若有多个候选区间,选择长度最长者;长度相同时选择最左者。该规则至多使用一次。 随后,对未被替换的每组删除前导零;若一组全为零,则保留一个 `0`。
输入一个长度为 39 的字符串,保证它恰由八组四位小写十六进制数和七个冒号组成。
输出压缩后的标识符。
2001:0db8:85a3:0010:0001:8a2e:0370:7334
2001:db8:85a3:10:1:8a2e:370:7334
1111:2222:2222:3333:4444:5555:6666:7777
1111:**:3333:4444:5555:6666:7777
考点:字符串
限制 1 秒 / 256MB | 标准输入输出
推荐方向:字符串
本题切入点
按规则做标识符压缩:先找最长的「四个字符完全相同的同位组连续区间」(同长取最左)替换成 **,至多一次;再对剩下的每组去前导零(全零保留一个 0)后拼接输出。
按字符逐个处理,或利用字符串的前后缀性质加速匹配。
思路框架(字符串 通法 · 非本题专属)
实现要点:Python 切片 s[l:r+1] 取子串;注意字符串不可变,频繁拼接改用 list。
复杂度:时间 O(n) ~ O(n²) | 空间 O(n)
该范式的通法易错点
样例 1:输入 2001:0db8:85a3:0010:0001:8a2e:0370:7334 → 输出 2001:db8:85a3:10:1:8a2e:370:7334
不存在同位字符组,只删除各组前导零。
样例 2:输入 1111:2222:2222:3333:4444:5555:6666:7777 → 输出 1111:**:3333:4444:5555:6666:7777
最长候选是连续两个 2222。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-06月03号开发岗。