【发布时间】:2012-03-21 12:47:51
【问题描述】:
我有五个字符串,如下所示,
ABBCCD
ABBDCD
ABBDCD
ABBECD
ABBDCD
除了第四个字符外,所有字符串基本相同。但只有出现时间最长的角色才会出现。例如这里 D 被放置在第四位 3 次。因此,最后的字符串将是 ABBDCD。我编写了以下代码,但在时间方面似乎效率较低。因为这个函数可以被调用百万次。我应该怎么做才能提高性能?
这里 changedString 是要与其他 5 个字符串匹配的字符串。如果更改字符串的任何位置与其他四个不匹配,则最大出现的字符将放置在 changedString 上。
len 是字符串的长度,所有字符串都相同。
for (int i = 0; i < len;i++ )
{
String findDuplicate = string.Empty + changedString[i] + overlapStr[0][i] + overlapStr[1][i] + overlapStr[2][i] +
overlapStr[3][i] + overlapStr[4][i];
char c = findDuplicate.GroupBy(x => x).OrderByDescending(x => x.Count()).First().Key;
if(c!=changedString[i])
{
if (i > 0)
{
changedString = changedString.Substring(0, i) + c +
changedString.Substring(i + 1, changedString.Length - i - 1);
}
else
{
changedString = c + changedString.Substring(i + 1, changedString.Length - 1);
}
}
//string cleanString = new string(findDuplicate.ToCharArray().Distinct().ToArray());
}
【问题讨论】:
-
我正在修复中,我该如何给出标题,好吧,我已经简短了。
-
不,我正在做一个项目,为此我需要使用此功能。但是要花很多时间。
-
首先,字符串连接很昂贵。请改用 StringBuilder。
-
如果字符串是固定长度的,char[] 会更快。
-
@BryceWagner:这是一个很好的观点。如果我了解他们试图对子字符串部分做什么,我认为他们实际上不需要整个子字符串,只需要一个字符。
标签: c# string performance