本题要求将一组大写字母去重后排序,然后将连续字母区间(长度 ≥ 3)合并为"起始-结束"格式,其余字母单独列出。
核心思路:扫描合并
去重排序:由于字母只有 A-Z(最多 26 个),可以用一个长度为 26 的布尔数组 seen[26] 标记出现过的字母,或使用 set 去重后排序。这样天然保证了按字母序处理。
扫描连续区间:遍历有序字母列表,对于每个起点 i,向右扩展找到最长的连续字母终点 j(即满足 letters[k+1] - letters[k] == 1)。
某社区有多条广播线路,每条线路用一个大写英文字母编号表示 (A-Z)。当发送广播时,为减少操作次数,会将连续相邻编号且满足一定个数的线路合并为一个区间,用“起始编号-结束编号”的简写形式表示;不连续或不满足个数的线路则单独列出。合并后的结果要求按字母升序排列,各项之间用一个逗号分隔。
具体合并规则如下:
参数 1:整数 n,表示需要广播的线路条数
参数 2:n 个大写字母,空格分隔,表示发送广播的线路编号。字母可能重复,但合并时每个编号只计一次。
一个字符串,表示合并后的广播线路列表,按字母升序排列,项间用逗号分隔。
约束:1≤n≤26,字母范围为 A-Z(仅大写)。输入字母可能有重复,需去重后排序再合并。
输入
6,"G B A F D C"
输出
A-D,F,G
说明
字母去重排序后为 A B C D F G。其中 A-D 连续 4 个(≥3),合并为 A-D;F 和 G 相邻但仅 2 个,不合并,写成 F,G。最终结果 A-D,F,G。
输入
3,"A C B"
输出
A-C
说明
字母排序后为 ABC,三字母连续,个数=3(≥3),合并为 A-C。
输入
4,"A A B B"
输出
A,B
说明
去重后仅剩 AB,虽然相邻但只有 2 个字母,不满足 ≥3 的合并条件,因此各自单独列出,结果为 A,B。此例说明:(1) 需要去重;(2) 仅 2 个连续字母不合并。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.