【发布时间】:2014-12-25 18:03:41
【问题描述】:
例如,我们得到长度为 5 (n = 5) 的字符串“Number”,它由从 1 到 a 的所有数字组成(数字可以重复,但从 1 到 a 的所有数字都必须包含在字符串中,并且字符串必须长度为 n)。假设 a = 2 并生成具有先前给定条件的示例性数字(或者更确切地说是数字序列),让它成为“12211”,长度为 5,由 1 和 2 组成。现在假设我们需要找到一种算法,该算法将在我们的字符串“Number”中找到所有可能的数字序列,其中每个序列都是“Number”的子字符串,每个序列都有不同的长度,可能只包含一次出现的任何数字。
对于我们的示例“12211”,我们可以说有 7 个序列:
1. "1"
2. "12"
3. "2"
4. "2"
5. "21"
6. "1"
7. "1"
结果将是“7”。
为清楚起见的另一个示例:对于“数字”=“123452”和 b = 5(数字为 1、2、3、4、5)可能的序列是:
1. "12345"
2. "1234"
3. "123"
4. "12"
5. "1"
6. "2345"
7. "234"
8. "23"
9. "2"
10. "3452"
11. "345"
12. "34"
13. "3"
14. "452"
15. "45"
16. "4"
17. "52"
18. "5"
19. "2"
结果将是“19”。
你对快速算法有什么想法吗?我想出的那个太慢了(比较每个数字)。
【问题讨论】:
-
您想要子字符串的数量还是全部打印出来?该算法可接受的时间复杂度是多少?
-
仔细阅读我写了子串的数量。我认为它可以在 O(n) 中完成,但我不确定。
-
这是 O(n) 问题,如果您将使用 O(1) 时间集。看我的回答。
标签: c++ regex string algorithm substring