在字符串C#中查找最常出现的字符,返回最长循环字符集的字符串

在字符串C#中查找最常出现的字符,返回最长循环字符集的字符串,c#,linq,C#,Linq,我对已经提出的一个问题进行了扩展 但是,我希望返回原始字符串中最长的一组可重新访问字符的列表,而不是按higheest排序的字符及其相对计数的列表 我对link相当精通,但从未遇到过在字符串中查询字符类型的实例,并认为有人可以给我一个提示来帮助我理解LINQ的特定用例 感谢使用链接的示例: var largest = input.GroupBy(x => x).OrderByDescending(x => x.Count()).First(); var asString = new

我对已经提出的一个问题进行了扩展

但是,我希望返回原始字符串中最长的一组可重新访问字符的列表,而不是按higheest排序的字符及其相对计数的列表

我对link相当精通,但从未遇到过在字符串中查询字符类型的实例,并认为有人可以给我一个提示来帮助我理解LINQ的特定用例


感谢使用链接的示例:

var largest = input.GroupBy(x => x).OrderByDescending(x => x.Count()).First();
var asString = new string(largest.Key, largest.Count());

我假设您想要最长的子字符串。例如,对于
aab,不需要创建大量的中间对象。您只需跟踪最长序列中的角色以及该序列的长度:

char longest = '\0';
int longestLength = 0;

char last = '\0';
int lastLength = 0;

foreach (char c in input)
{
    if (c == last)
    {
        lastLength++;

        if (lastLength > longestLength)
        {
            longestLength = lastLength;
            longest = c;
        }
    }
    else
    {
        lastLength = 1;
    }

    last = c;
}

var result = new string(longest, longestLength);

例如,对于“abbbccd”返回“bbbb”,您可以提供一个示例。更好地理解这个问题会有帮助。如果输入是“bbbbccdb”-你希望输出是“bbbb”还是“bbbbb”?bbbbbb也应该返回,所以“aaabbbaabbcccddccaabb”将返回“bbbbb”而不是“bbbbbbbbb”,你能解释一下“理发杆字符”是什么意思吗,谷歌搜索只是把你在理发店外面看到的螺旋形的柱子带出来。我想你可能指的是管道字符| |,然而,将你的第一段代码粘贴到控制台应用程序中会产生一个带有问号的小方块。请澄清。谢谢我将处理示例的其余部分。Unicode字符“”(U+1F488)只是由两个System.Char元素表示的字符示例。请参阅(每个软件开发人员绝对、绝对必须了解Unicode和字符集的最低要求)[作者:Joel Spolsky.Visual Studio和StackOverflow on(IE)应该可以显示这个字符。其他浏览器/系统/字体可能会返回到一个包含十六进制数字的框中。但是cmd.exe将其视为两个字符,它不知道,所以它显示了??好的,谢谢…但由于您的方括号,它返回了404,所以更新的链接是您的示例为我打开了许多新领域。我做到了在wikipedia上查找与CHARGEN服务相关的参考资料。使用默认UTF16编码,因为它也使用代码点,我会错过什么?我发现UTF32中已经支持许多语言。在使用一些非常大的字符串进行测试后,这是正确的答案,因为其他字符似乎会连接任何其他字符,而这些字符e相同但不是最长的,但在字符串中以较短的重复出现。即“aabbbaabccdd”将返回“bbbbb”,而不是“bbb”这是列表中重复时间最长的字符组感谢这是干净、快速和简洁的。作为一名web开发人员,而不是系统程序员,拥有易于使用的语法对我更有帮助,因为我必须跟上许多客户端技术和样式问题的最新发展。我明白了我现在遇到的问题,实际上我有了第一个状态t、 但我不知道如何像你在第二条语句中那样获取结果并将其输入到新字符串中。我应该指定一个更具体的示例,我希望有一个很好的简短表达式来完成此操作。注意@magister想要最长的循环字符串,例如“aabbbaa”->“bbb”而不是“aaaa”。此方法不考虑字符编码。请尝试以下操作:字符串输入=”aab@XavierDecoster这种方法适用于最多16位的Unicode字符。例如
string input=“aab\u2764\u2764\u2764\u2605”
是aab❤❤❤★ 并正确地导致❤❤❤. 但是,高于16位字符的阈值,因此需要一对代理项字符对其进行编码。您可以调整此方法,在每个阶段最多存储两个字符,并使用来检测代理项。