一个字符串有多少个子串

时间:2014-07-23 03:51:07

标签: algorithm dynamic-programming combinatorics

字符串中有多少个子字符串?

Why does string x [1:n] have O(n^2) subtrings in the lecture 21 Dynamic Programming III of        
6.006 from MIT? 
Why is not O(2^n)?

这是一个链接[http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/MIT6_006F11_lec21.pdf]

5 个答案:

答案 0 :(得分:30)

取一个字符串长度n = 4,说:“ABCD”

上述子串(按长度):

  • 1个字符:A,B,C,D( 4 子字符串)
  • 2个字符:AB,BC,CD,( 3 子字符串)
  • 3个字符:ABC,BCD( 2 子字符串)
  • 4个字符:ABCD( 1 子字符串)

总计数字产量:1 + 2 + 3 + 4 = 10

因此,为了概括,可能的子字符串的数量是从1到n的所有整数的总和。

此总和使用公式(n ^ 2 + n)/ 2 计算(请参阅此处:Sum of Consecutive Numbers

因此效率为 n ^ 2 数量级。

答案 1 :(得分:17)

只需子串由两个参数[i,j]定义,这两个参数是原始字符串中 substring 的起始索引和结束索引。现在0<=i,j<=n作为索引应该在字符串中,每个可以包含的总值i&j为n,因此[i,j]的所有组合都是n*n,即O(n^2) < / p>

答案 2 :(得分:5)

给定一串n个元素,

如果从1st元素开始,则可以形成n个字符串

如果从第2个元素开始,则可以形成n-1个字符串 ......等等......

例如,取1234

1,12,123,1234

2,23,234

3.34

4

如您所见,总数为n + (n-1) + (n-2) ...1,即 n个元素的总和,即 n(n+1)/2

答案 3 :(得分:1)

你可能会对一组子集的数量感到困惑,但这里似乎很重要的是这些是具有固定模式的子串和你认为2 ^ n的值,这将是子序列的数量。给定字符串。

答案 4 :(得分:-3)

您想要获得的子字符串数量。从索引开始和结束。

string.Substring(0, 10); // untill 10th character, and so on

http://msdn.microsoft.com/en-us/library/aka44szs(v=vs.110).aspx

如果您尝试使用foreach获取字符串,则会在空格字符处分割每个字符串。因此,空格字符将指定字符串内的字符串数。

string strngs = "Love for all, Hatred for none!";

foreach (string strng in strngs) {
   Console.WriteLine(strng);
}

// (Expected) Output
// Love
// for
// all,
// Hatred
// for
// none!