【发布时间】:2014-04-10 18:21:27
【问题描述】:
我已经为此苦苦挣扎了一个星期。
我有一个这样的字符串:1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1.....
我需要找到的东西:1 1 0
示例 2:1 1 2 0 2 2 1 0 1 1 2 0 2 2 1 0 1 1 2 0 2 2 1 0 1 1 2 0 2 2 1 0 ....
我需要找到的东西:1 1 2 0 2 2 1 0
示例 3:1 1 2 3 1 0 1 1 2 3 1 0 1 1 2 3 1 0 1 1 2 3 1 0 1 1 2 3 1 0...
112310
等等。等等
我现在的代码:
private string tekrarArama(double[] mods)
{
string part1 = "";
string part2 = "";
string patern = "";
int number1 = mods.Length;
for (int i = 0; i < mods.Length; i++)
{
part1 = "";
part2 = "";
for (int j = 0; j < number1; j++)
{
part1 += mods[j] + ",";
}
for (int k = 0; k < mods.Length; k++)
{
part2 += mods[k] + ",";
}
int actualcount = Regex.Matches(part2, part1).Count;
int count = part2.Replace(",", "").Length / part1.Replace(",", "").Length;
if (part2.IndexOf(bolum1) >= 0 && actualcount == count )
{
patern = part2.Substring(part2.IndexOf(part1),part1.Length);
}
number1--;
}
return patern;
}
它创建字符串的两个副本,并在每次迭代中从其中一个字符串中一次删除 1 个字符,以找到最小的重复模式。
这是一团糟,根本不能很好地工作。 我怎样才能做到这一点?提前致谢。
【问题讨论】:
-
@PatrykĆwiek 我不认为他在寻找最长的。在给出的第一个示例中,110 不是最长的重复子字符串。
-
先将算法描述为伪代码并用铅笔和纸进行桌面运行可能会更好。
-
@PatrykĆwiek 更像是最短的字符串:)
标签: c# string pattern-matching repeat