gpt4 book ai didi

c# - 计算类似于游程编码的字符串中的出现次数 c#

转载 作者:行者123 更新时间:2023-11-30 21:57:35 24 4
gpt4 key购买 nike

假设我有一个字符串

MyString1 = "ABABABABAB";
MyString2 = "ABCDABCDABCD";
MyString3 = "ABCAABCAABCAABCA";
MyString4 = "ABABACAC";
MyString5 = "AAAAABBBBB";

我需要得到以下输出

Output1 = "5(AB)";
Output2 = "3(ABCD)";
Output3 = "4(ABCA)";
Output4 = "2(AB)2(AC)";
Output5 = "5(A)5(B)";

我一直在研究 RLE,但我不知道如何执行上述操作。我一直在使用的代码是

public static string Encode(string input)
{
return Regex.Replace(input, @"(.)\1*", delegate(Match m)
{
return string.Concat(m.Value.Length, "(", m.Groups[1].Value, ")");
});
}

这适用于 Output5,但我可以使用 Regex 执行其他输出还是应该使用 Linq 之类的东西?

代码的目的是以简单的方式显示 MyString,因为我可以获得最多 1000 个字符的 MyString,通常带有一个模式。
我不太担心速度。

最佳答案

对单个字符使用 RLE 很容易,匹配之间永远不会重叠。如果要重复的字符数是可变的,你就会遇到问题:

AAABAB

可能是:

3(A)BAB

或者

AA(2)AB

您必须定义要应用的规则。你想要绝对最好的压缩吗?速度重要吗?

我怀疑 Regex 能否向前看并选择“最佳”匹配组合 - 因此,为了回答您的问题,我会说“不”。

关于c# - 计算类似于游程编码的字符串中的出现次数 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30613265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com