C# 字符串处理:如何按规则合并单字符单词与相邻单词
实现方案
这个需求不需要直接遍历原始字符串处理,先把字符串按空格分割为独立单词再处理,逻辑会清晰很多,时间复杂度为O(n)(n为字符串总长度),实现非常简单。
核心逻辑
- 按空格切割原始字符串为单词数组,自动过滤连续空格产生的空值
- 遍历单词数组,只需要判断两种情况:
- 结果列表中最后一个单词是单字符:和当前单词合并(对应单字符是首个单词的场景,和右侧合并)
- 当前遍历到的单词是单字符:和结果列表最后一个单词合并(对应非首位单字符和左侧合并)
- 其他情况直接把当前单词加入结果列表
- 最后把处理后的结果列表用空格拼接成字符串即可
代码示例(Python)
数组遍历实现
def merge_single_char_words(s: str) -> str: # 分割并过滤空字符串,兼容多空格分隔的场景 words = [w for w in s.split() if w] if not words: return "" res = [words[0]] for cur_word in words[1:]: last_word = res[-1] if len(last_word) == 1 or len(cur_word) == 1: # 满足合并条件,拼接后替换最后一个元素 res[-1] = last_word + cur_word else: res.append(cur_word) return " ".join(res) # 测试用例 print(merge_single_char_words("a bcd tttt")) # 输出:abcd tttt print(merge_single_char_words("abc d hhhh")) # 输出:abcd hhhh print(merge_single_char_words("a b c de f")) # 输出:abc def
正则表达式实现(更简洁)
也可以通过正则匹配直接替换,不需要遍历数组:
import re def merge_single_char_words(s: str) -> str: # 处理开头单字符和右侧单词合并 s = re.sub(r"^(\w)\s+(\w+)", r"\1\2", s) # 处理非开头单字符和左侧单词合并 s = re.sub(r"(\w+)\s+(\w)(?=\s|$)", r"\1\2", s) return s
如果单词允许包含非字母数字字符,只需要把正则中的\w替换为\S即可适配所有非空格字符的场景。
内容的提问来源于stack exchange,提问作者user15582964
相关产品推荐
相关产品推荐

