正在查找重复的子字符串

本文关键字:字符串 查找 | 更新日期: 2023-09-27 18:20:30

是否有一种逻辑方法可以在字符串中找到重复的子字符串,无论子字符串重复多少次都可以工作;然后返回与最终单词重复的次数。

For example, abc-abc-abc-
Can be broken into | abc- | abc- | abc-
                                 = abc- x3
Example 2, abc-abc-abc-abc-
Can be broken into | abc- | abc- | abc- | abc-
                                        = abc- x4

对于偶数重复,将字符串一分为二,然后比较两个子字符串不是问题。然后你可以一直循环直到两半不匹配。

对于奇数字符串长度,您可以将其分成3个部分,然后比较所有三个部分,并执行相同的操作。

当一个单词重复7或11次时,问题就会出现。将长度除以4或5也可以。

例如,具有yesnoyesnoyesnoyesnoyesnoyesnoyesno的字符串具有重复7 times. 的子字符串yesno

有没有某种公式、正则表达式或linq可以将yesnoyesnoyesnoyesnoyesnoyesnoyesno转换为yesno (x7)

正在查找重复的子字符串

这对我的(..*?)(?='1(?='1*$)|$)演示有效
甚至更短的(..*?)(?='1*$)演示

  • (..*?)至少捕获一个字符,并根据需要添加任意数量的字符
  • CCD_ 9对先前捕获的结果进行尽可能多次的展望,直至结束
var list=new string[]{"abc-abc-abc-",
                    "abc-abc-abc-abc-",
                    "yesnoyesnoyesnoyesnoyesnoyesnoyesno"};
var reg=new Regex("(.+?)(?=''1|$)");
foreach(var str in list)
{
  string result=string.Format("{0} (x{1})",reg.Match(str).Value,  reg.Matches(str).Count);
  Console.WriteLine(result);
}

输出:

abc- (x3)
abc- (x4)
yesno (x7)