gpt4 book ai didi

c# - 在包含数字的字符串中查找未知的重复模式

转载 作者:行者123 更新时间:2023-11-30 16:59:56 24 4
gpt4 key购买 nike

我已经为此苦苦挣扎了一个星期。

我有这样一个字符串: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 个字符,以找到最小的重复模式。

一团糟,根本不能很好地工作。我怎样才能做到这一点?提前致谢。

最佳答案

如果您正在寻找简单的东西并且不需要最佳的复杂性,这里有一种表示查询的简洁方法。

string FindPattern(string text)
{
if (text == null)
{
return null;
}

return Enumerable
.Range(1, text.Length / 2)
.Where(n => text.Length % n == 0)
.Select(n => text.Substring(0, n))
.Where(pattern => Enumerable
.Range(0, text.Length / pattern.Length)
.SelectMany(i => pattern)
.SequenceEqual(text))
.FirstOrDefault();
}

请注意,这里的复杂度在最坏情况下是二次方的,因此将它用于很长的字符串并不是一个好主意。

关于c# - 在包含数字的字符串中查找未知的重复模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22995978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com