c# - 从 C# 中的重复字符串中确定唯一字符串

标签 c# .net string string-parsing

我需要开发一种有效的算法来确定给定具有重复内容(并且仅重复内容)的字符串的唯一(重复)字符串...

例如:

“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/

相关文章:

c# - 在字母的第一个实例处分割文本

c# - 需要将一个类转换为另一个具有不同值集合的类

c# - 如何使用 sevenzipsharp 提取文件

c# - LINQ - VB.Net 中的动态 OrderBy

.net - 线程如何在对象中工作

Java ArrayList<String> 到单个字符串而不使用循环

c# - 如何在 Elastic Search 中进行双重嵌套聚合?

c# - 在 WinForm 应用程序中播放 MP3 文件

objective-c - iOS 将按钮标题与字符串进行比较

c++ - 替换 std::string 中字符的最快(也是最安全)方法