华为 · 模拟 · 算法编程题
华为 模拟 时限 2 秒 / 256 MB

题目描述

小红正在学习大模型分词算法。BPE 会先把字符串拆成单个字符 Token,然后不断合并当前出现频率最高的相邻 Token 对。
给定只包含小写英文字母的字符串 S 和最大合并次数 K,请模拟 K 轮 BPE 合并。
每一轮中,统计当前 Token 序列里所有相邻 Token 对的出现次数,选择出现次数最多的一对进行合并;如果存在多个最高频相邻对,选择在当前序列中第一次出现位置最靠前的一对。
选定相邻对后,从左到右扫描序列,所有不重叠的该相邻对都要被合并为一个新 Token。请输出最终 Token 序列。

输入输出

输入描述
第一行输入一个仅由小写英文字母组成的字符串 S。
第二行输入一个整数 K,表示最大合并次数。
输出描述
输出最终 Token 序列,Token 之间用一个空格分隔,行末不输出多余空格。

样例共 1 组

样例 1
输入
hughug 1
输出
h ug h ug

算法解析依据一般

考点:模拟

限制 2 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:2 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:模拟

不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。

思路框架(模拟 通法 · 非本题专属)

  1. 用变量记录题目要求的「状态」(当前值、剩余数量、当前位置等)。
  2. 按题面给出的顺序,把每一步操作写成一段代码,逐条执行。
  3. 每一步执行后更新状态,并在题目要求的位置输出或累计答案。
  4. 注意循环的边界:执行多少次、何时终止、是否能终止。

实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。

复杂度:时间 O(操作次数) | 空间 O(状态数)

该范式的通法易错点

  • 终止条件写错导致死循环或漏做最后一次操作。
  • 状态更新顺序颠倒(先改了下标又用旧下标)。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

  • 输入:hughug 1
  • 输出:h ug h ug

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年-华为-05月13号AI岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解