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

C#实现字符串重复字符仅保留一次的问题求助

问题分析与修复

你的代码核心问题有两个:

  • 逻辑判断完全搞反:你写的word.Split(word[i]).Length - 1 > 1 ? ' ' : word[i],意思是字符出现次数大于1时替换为空格,仅出现1次时才保留字符,这和你“重复字符仅显示一次”的需求完全相反。
  • 未做去重标记:遍历每个字符时,哪怕已经添加过该字符,仍会重复处理,导致最终结果可能出现重复(如果字符仅出现1次的话)。

另外用Split统计字符出现次数的方式效率极低,不推荐使用。


修复方案

方案1:使用HashSet(高效直观)

用HashSet记录已经处理过的字符,遍历字符串时只保留首次出现的字符:

static void Main(string[] args)
{
    string word = "Hello World!";
    Console.WriteLine(encode(word));
}

static string encode(string word)
{
    string result = "";
    var seenChars = new HashSet<char>();
    word = word.ToLower();

    foreach (char c in word)
    {
        if (!seenChars.Contains(c))
        {
            seenChars.Add(c);
            result += c;
        }
    }

    return result;
}

测试输入"aaabbbccc"会输出"abc",输入"Hello World!"会输出"helo wrd!"。

方案2:使用LINQ(简洁一行搞定)

利用LINQ的Distinct()方法直接获取唯一字符序列:

static void Main(string[] args)
{
    string word = "Hello World!";
    Console.WriteLine(encode(word));
}

static string encode(string word)
{
    return new string(word.ToLower().Distinct().ToArray());
}

这个方法逻辑和方案1一致,只是用LINQ简化了代码,效果完全相同。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:05:03