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

C#如何从字符串列表中提取最小唯一前缀子序列

问题分析与修复方案

原代码错误点

  • 拼写错误:C# 中 List<T> 的元素数量是属性 Count,不是方法 count(),原代码会编译失败。
  • 核心逻辑错误:内层循环仅判断了第一个不匹配的已存前缀就直接添加当前字符串,没有遍历所有已存前缀确认是否存在任意一个是当前字符串的前缀,导致大量不符合规则的长字符串被误加入结果。

修正后逻辑

你原有的排序逻辑是正确的:先将所有字符串按长度从小到大排序,保证短的候选前缀优先被处理。后续遍历每个字符串时,只要判断结果列表中不存在任何一个元素是当前字符串的前缀,才将当前字符串加入结果,否则直接跳过即可。

可运行代码

// values 是你的输入字符串集合
var result = new List<string>();
// 按字符串长度升序排序,保证短前缀优先进入结果集
var sortedStrings = values.OrderBy(x => x.Length).ToArray();

foreach (var s in sortedStrings)
{
    // 标记当前字符串是否有匹配的前缀
    bool hasPrefix = false;
    foreach (var existing in result)
    {
        if (s.StartsWith(existing))
        {
            hasPrefix = true;
            break;
        }
    }
    // 没有匹配到任何前缀才加入结果
    if (!hasPrefix)
    {
        result.Add(s);
    }
}

测试验证

用你给出的两个示例测试:

  1. 输入 ["1","11","111","12","13"]:排序后第一个元素是"1"加入结果,后续所有字符串都以"1"为前缀,全部跳过,最终输出 ["1"],符合预期。
  2. 输入 ["11","12","13","131","141","14","111"]:排序后先处理"11"、"12"、"13"、"14"加入结果,后续的"131"以"13"为前缀、"141"以"14"为前缀、"111"以"11"为前缀,全部跳过,最终输出["11","12","13","14"],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:05