【发布时间】:2013-05-31 13:33:30
【问题描述】:
我只想接受没有任何子字符串连续重复三次的字符串。子字符串事先不知道。例如,“a4a4a4123”包含“a4”; “abcdwwwabcd” - “w”; "abcde" - 有效,没有三次重复。
我尝试自己实现它,但这仅适用于带有一个字母的子字符串:
public bool IsValid(string password)
{
var validate = true;
char lastLetter = ' ';
var count = 1;
for (int pos = 0; pos < password.Length; pos++)
{
if (password[pos] == lastLetter)
{
count++;
if (count > 2)
{
validate = false;
break;
}
}
else
{
lastLetter = password[pos];
count = 1;
}
}
return validate;
}
【问题讨论】:
-
你有什么尝试吗?
-
你想写这个:bool containsSubstringThreeTimes(string, substring) 还是这个:string[] substringsContainedThreeOrMoreTimes(string)?因为它们是非常不同的算法。
-
Soner Gönül,是的,我已经更新了我的问题。
-
Patashu,我需要第二个 substringsContainedThreeOrMoreTimes(string)
-
这听起来很难。我会尝试变得贪婪:生成每个长度小于或等于大字符串三分之一的子字符串,并匹配大字符串中的子字符串。根据想要的性能,这可能或不实用:对于 15 个字母的长度,这加起来是 4943 个子字符串,然后您都必须搜索。