如何识别字符串中连续递增1的字母序列并替换中间字符为“-”
解决方案
核心逻辑
要解决这个问题,关键是跟踪连续递增的字母序列:当序列长度达到3个及以上时,用首尾字符加连接符-替换中间部分;长度不足3的话直接保留原字符即可。
实现步骤
- 初始化变量:用
start记录当前递增序列的起始索引,用列表result存储处理后的片段(比直接拼接字符串更高效)。 - 遍历字符串,从第二个字符开始,对比当前字符与前一个字符的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
相关产品推荐
相关产品推荐

