【发布时间】:2015-10-27 06:58:09
【问题描述】:
我最近一直在做编程算法,只是为了练习:)。 我从一个网站得到这个问题。问题是:
编写一个函数来查找字符串中最长运行的从零开始的索引。运行是相同字符的连续序列。如果有多个相同长度的运行,则返回第一个的索引。
例如,IndexOfLongestRun("abbcccddddcccbba") 应该返回 6,因为最长的运行是 dddd,它首先出现在索引 6 上。
所以我想出了这个:
public static int IndexOfLongestRun(string str)
{
string retval = string.Empty;
string firstOccurence = string.Empty;
string maxOccurence = string.Empty;
string val1 = string.Empty;
string val2 = string.Empty;
int counter = 1;
int occurenceCounter = 1;
int maxOccur = 0;
for (int i = 0; i < str.Length; i++)
{
val1 = str[i].ToString();
if (i < str.Length - 1)
{
val2 = str[i + 1].ToString();
}
else
{
val2 = str[i].ToString();
}
if (val1 == val2)
{
firstOccurence = val1;
occurenceCounter = occurenceCounter + counter;
if (occurenceCounter > counter && occurenceCounter > maxOccur)
{
maxOccur = occurenceCounter;
maxOccurence = firstOccurence;
}
continue;
}
else
{
occurenceCounter = 1;
}
}
return str.IndexOf(maxOccurence, 0);
}
这是过去我测试的主要目的。但是它在性能基准上让我失望。任何人都可以阐明如何优化我的这段代码吗?谢谢。
【问题讨论】:
-
有什么问题?您正在遍历字符串一次,这在任何情况下都是必需的。
-
问题是测试用例似乎有我的代码更好的版本,更准确地说是优化。
-
我不确定是否需要在找到长度为 N 的运行后检查每个下一个字符。因为如果字符 [i] 和 [i+N] 不同,那么很明显,这两个字符之间没有更长的运行。
标签: algorithm