📅  最后修改于: 2023-12-03 14:39:42.138000             🧑  作者: Mango
用C#语言编写程序来找到给定字符串中的最长条纹(即始于字符串开头并在其中多次重复的字符串)。
将字符串分成两个部分,第一部分是重复的条纹,第二部分是重复的次数。假设字符串中有一个最长的条纹,它的长度为L,并且字符串的长度为N。因此,条纹的长度肯定小于等于N / 2。
从长度1开始,我们将字符串分成两个部分:条纹和次数。如果次数是字符串的一个整数倍,并且由该条纹形成,该条纹就是候选条纹。对于每个长度L,我们会发现可能有几个候选条纹。我们选择时间最久的一个作为最长条纹。
根据上述分析,我们可以得到以下步骤:
using System;
namespace LongestStripe
{
class Program
{
static void Main(string[] args)
{
string input = "abababc";
var longestStripe = FindLongestStripe(input);
Console.WriteLine("Longest Stripe: " + longestStripe);
}
static string FindLongestStripe(string s)
{
int n = s.Length;
int longestLength = 0;
string longestStripe = "";
for (int i = 1; i <= n / 2; i++)
{
if (n % i == 0)
{
string sub = s.Substring(0, i);
int repeat = n / i;
bool isStripe = true;
for (int j = 1; j < repeat; j++)
{
if (sub != s.Substring(j * i, i))
{
isStripe = false;
break;
}
}
if (isStripe && sub.Length > longestLength)
{
longestLength = sub.Length;
longestStripe = sub;
}
}
}
return longestStripe;
}
}
}
我们使用示例字符串abababc
来测试这个程序。该字符串的最长条纹是ab
,程序的输出将是:
Longest Stripe: ab