我需要开发一种有效的算法来确定给定具有重复内容(并且仅重复内容)的字符串的唯一(重复)字符串...
例如:
“AbcdAbcdAbcdAbcd”
=> “Abcd”
“你好”
=> “你好”
我在想出一个相当有效的算法时遇到了一些麻烦;任何意见将不胜感激。
澄清:我想要最短的字符串,当重复足够多次时,它等于总字符串。
最佳答案
private static string FindShortestRepeatingString(string value)
{
if (value == null) throw new ArgumentNullException("value", "The value paramter is null.");
for (int substringLength = 1; substringLength <= value.Length / 2; substringLength++)
if (IsRepeatingStringOfLength(value, substringLength))
return value.Substring(0, substringLength);
return value;
}
private static bool IsRepeatingStringOfLength(string value, int substringLength)
{
if (value.Length % substringLength != 0)
return false;
int instanceCount = value.Length / substringLength;
for (int characterCounter = 0; characterCounter < substringLength; characterCounter++)
{
char currentChar = value[characterCounter];
for (int instanceCounter = 1; instanceCounter < instanceCount; instanceCounter++)
if (value[instanceCounter * substringLength + characterCounter] != currentChar)
return false;
}
return true;
}
关于c# - 从 C# 中的重复字符串中确定唯一字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13691491/