You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别字符串中连续递增1的字母序列并替换中间字符为“-”

解决方案

核心逻辑

要解决这个问题,关键是跟踪连续递增的字母序列:当序列长度达到3个及以上时,用首尾字符加连接符-替换中间部分;长度不足3的话直接保留原字符即可。

实现步骤

  1. 初始化变量:用start记录当前递增序列的起始索引,用列表result存储处理后的片段(比直接拼接字符串更高效)。
  2. 遍历字符串,从第二个字符开始,对比当前字符与前一个字符的ASCII码差值:
    • 若差值为1,说明仍在连续序列中,继续遍历。
    • 若差值不为1,检查当前序列的长度:
      • 长度≥3:将起始字符 + "-" + 结束字符加入结果。
      • 长度<3:将序列的所有字符直接加入结果。
      • 更新start为当前索引,开启新的序列跟踪。
  3. 遍历结束后,处理最后一段未完成的序列。

示例代码(Python)

def compress_increasing_sequence(s):
    if len(s) < 3:
        return s
    result = []
    start = 0
    for i in range(1, len(s)):
        # 判断当前字符与前一个是否连续递增1
        if ord(s[i]) != ord(s[i-1]) + 1:
            seq_len = i - start
            if seq_len >= 3:
                result.append(f"{s[start]}-{s[i-1]}")
            else:
                result.append(s[start:i])
            start = i
    # 处理最后一段序列
    seq_len = len(s) - start
    if seq_len >= 3:
        result.append(f"{s[start]}-{s[-1]}")
    else:
        result.append(s[start:])
    return ''.join(result)

# 测试示例输入
input_str = "abcdhswxyz"
print(compress_increasing_sequence(input_str))  # 输出:a-dhsw-z

关键点说明

  • 用ord()函数将字符转为ASCII码,快速判断是否连续递增。
  • 优先使用列表存储片段,最后用join()拼接,避免字符串拼接带来的性能损耗(尤其是处理长字符串时)。
  • 提前处理长度小于3的字符串,直接返回原内容,减少不必要的计算。

内容的提问来源于stack exchange,提问作者Leecope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:35:39