Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 替换字符串中的重复字符_C#_String - Fatal编程技术网

C# 替换字符串中的重复字符

C# 替换字符串中的重复字符,c#,string,C#,String,是否可以使用C#查找并替换字符串中的任何重复字符?我正在尝试减小从jpeg图像转换而来的base64字符串的大小。我注意到base64字符串包含许多重复字符,例如: 6qdquxja7uucgq8g/wa6fquuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

是否可以使用C#查找并替换字符串中的任何重复字符?我正在尝试减小从jpeg图像转换而来的base64字符串的大小。我注意到base64字符串包含许多重复字符,例如:

6qdquxja7uucgq8g/wa6fquuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu+

如果有一种方法可以用这样的方式删除重复字符,那么总体上会小得多:

[Qauuaffffabrr,18]

格式为[重复字符,次数]。

这可能吗?谢谢你的帮助。:)

您必须创建一个搜索和替换函数。这实际上取决于重复字符串的长度是否恒定。在您的示例中,重复字符串的长度为16个字符,因此您可以编写一个路由,获取前16个字符,将其与下16个字符进行比较,依此类推,直到找到一个不同的字符串。然后,它将用您的语法替换字符串来表示它们

如果重复字符串的长度是可变的,那么它就稍微复杂一些。基本上,您必须从一个短字符串开始,并不断增长它,将其与下一组相同长度的字符进行比较,如果它们重复,请检查下一组字符,依此类推。但这可能是偶然的


搜索压缩算法,因为其中许多算法的原理相似。

您可以找到重复次数最多的最长字符串

int mx = -1;
string str = null;
for (int i = 0; i < str.Length; i++) for (int j = i + 1; j < str.Length; j++)
{
string sub = str.Substring(i, j - i);
int tmp = countAll(str, sub); // write countAll() yourself
if (tmp > mx) { mx = tmp; str = sub; }
}
然后,您将为每个角色分配出现的次数:

string total = "";
foreach (var item in rep) total += item.Key;
添加


如果你真的想找到最长的重复子字符串,那么你应该用它来解决这个问题。

你基本上是在尝试自己的无损压缩算法——像zip这样的算法完全按照你的要求工作,只是它们工作于字节而不是字符串中的字符

流行的压缩算法实际上保证比您在合理的时间内设计和实现的算法更高效。首先,由于字节对齐问题,他们可能会看到base64字符串中不明显的模式


那么为什么不在base64编码之前压缩二进制数据,而不是反过来呢

当然,但您必须更改任何使用BASE64编码的电子邮件客户端的代码(我想这就是原因),您可以尝试压缩它。字典的开销可能不值得,但它基本上就是这样做的。如果您打算以ASCII格式传输结果,则可能必须调整算法以使用字符而不是位。由于JPEG已在内部压缩,因此您的压缩策略将不会产生任何结果。查看文件中后面的字节以了解我的意思。简单的方法是使用HashMap,每当它在映射中遇到相同的值时,HashMap就会增加值。它将给出O(n)的复杂性
string total = "";
foreach (var item in rep) total += item.Key;