C# - 从字符串中获取所有子字符串的代码优化

Pra*_*kar 4 c# optimization

我正在编写一个代码片段来获取给定字符串中的所有子字符串.

这是我使用的代码

 var stringList = new List<string>();
 for (int length = 1; length < mainString.Length; length++)
 {
    for (int start = 0; start <= mainString.Length - length; start++)
    {
       var substring = mainString.Substring(start, length);
       stringList.Add(substring);
    }
 }
Run Code Online (Sandbox Code Playgroud)

看起来不是那么好,有两个for循环.有没有其他方法可以通过更好的时间复杂度实现这一目标.

我坚持认为,为了获得子串,我肯定需要两个循环.还有其他方法可以研究吗?

Phi*_*gan 7

字符串中的子串数是O(n^2),因此在另一个中的一个循环是您可以做的最好的.你的代码结构是正确的.

这是我如何表达你的代码:

void Main()
{
    var stringList = new List<string>();
    string s = "1234";
    for (int i=0; i <s.Length; i++)
        for (int j=i; j < s.Length; j++)
            stringList.Add(s.Substring(i,j-i+1));
}
Run Code Online (Sandbox Code Playgroud)

  • 不,您不能改进O(n ^ 2),因为有正好(n(n + 1))/ 2个子字符串,以Big O表示法是O(n ^ 2)。答案的数量设置了复杂性的下限,因此您无法对其进行改进。 (2认同)