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

如何在C语言中实现移除字符数组内连续重复行的函数

实现连续重复行的去重函数

嘿,这个需求我太熟了!你想要的其实是连续重复项去重——只保留连续重复组的第一行,非连续的相同行完全不用动,甚至还支持非完全匹配的情况对吧?我来给你一步步拆解怎么实现~

核心思路

实现这个功能的关键逻辑很简单:

  • 维护一个结果列表,用来存储去重后的内容
  • 记录“上一行”的内容,作为当前行的对比基准
  • 遍历原数组时,每一行都和上一行对比:
    • 如果两者不满足“连续重复”的条件,就把当前行加入结果列表,同时更新“上一行”为当前行
    • 如果满足连续重复,直接跳过当前行

基础版:完全匹配连续重复

先从最基础的“整行完全相同”的情况开始,拿Python举例子,这个逻辑换成其他语言(比如Java、C#)也完全通用:

def remove_consecutive_duplicates(lines):
    # 处理空数组的边界情况
    if not lines:
        return []
    
    result = [lines[0]]  # 先把第一行加入结果
    for line in lines[1:]:
        # 对比当前行和结果列表的最后一行(也就是上一行)
        if line != result[-1]:
            result.append(line)
    return result

测试示例

# 你的示例输入
input_lines = ["Hi", "Hello", "Hello", "Hello", "Hello"]
# 调用函数
output_lines = remove_consecutive_duplicates(input_lines)
print(output_lines)  # 输出: ["Hi", "Hello"]

扩展版:非完全匹配的连续重复

你提到“不一定要求整行完全相同”,那我们可以把对比逻辑改成自定义的匹配规则,比如以下几种常见场景:

场景1:前缀匹配(前N个字符相同就算连续重复)

比如只要两行的前5个字符一样,就判定为连续重复:

def remove_consecutive_prefix_duplicates(lines, prefix_length=5):
    if not lines:
        return []
    
    result = [lines[0]]
    for line in lines[1:]:
        # 处理行长度小于前缀长度的情况
        prev_prefix = result[-1][:prefix_length] if len(result[-1]) >= prefix_length else result[-1]
        curr_prefix = line[:prefix_length] if len(line) >= prefix_length else line
        
        if curr_prefix != prev_prefix:
            result.append(line)
    return result

场景2:相似度匹配(两行相似度超过阈值就算连续重复)

用字符串相似度算法(比如编辑距离)来判断,比如相似度超过80%就算连续重复:

import difflib

def remove_consecutive_similar_duplicates(lines, similarity_threshold=0.8):
    if not lines:
        return []
    
    result = [lines[0]]
    for line in lines[1:]:
        # 计算两行的相似度(0-1之间,1表示完全相同)
        similarity = difflib.SequenceMatcher(None, result[-1], line).ratio()
        if similarity < similarity_threshold:
            result.append(line)
    return result

注意事项

  • 所有版本都保留了非连续的相同行,比如输入是["Hi", "Hello", "Hi"],输出还是["Hi", "Hello", "Hi"],完全符合你的需求
  • 边界情况(空数组、单一行数组)都做了处理,不会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:33:53