给你 'n' 个字符串 w1, w2, ......, wn。令 Si 表示通过考虑字符串 wi 的所有唯一子字符串形成的字符串集合。子字符串定义为字符串中一个或多个字符的连续序列。可以在此处找到有关子字符串的更多信息。让'S' = {S1 U S2 U .... Sn}。即'S'是通过考虑所有集合S1,S2,......Sn中的所有唯一字符串而形成的字符串集合。您将获得许多查询,并且对于每个查询,您将获得一个整数“k”。您的任务是从集合“S”中输出按字典顺序排列的第 k 个最小字符串。
输入:
输入的第一行包含一个整数“n”,表示字符串的数量。接下来的每一行都由一个字符串组成。第 i 行 (1<=i<=n) 上的字符串用 wi 表示,长度为 mi。下一行由一个整数“q”组成,表示查询的数量。接下来的“q”行中的每一行都包含一个整数“k”。
注意:输入字符串仅由小写英文字母 'a' - 'z' 组成。
输出:
输出“q”行,其中第 i 行由一个字符串组成,该字符串是第 i 个查询的答案。如果输入无效('k' > |S|),则输出“INVALID”(为清楚起见,引号)。
约束:
1<=n<=50
1<=mi<=2000
1<=q<=500
1<=k<=1000000000
https://www.interviewstreet.com/challenges/dashboard/#problem/4efa210eb70ac
我的方法
对于每个输入字符串,生成其子字符串并将它们添加到集合中,这将自动消除重复并保持它们的排序。返回集合中索引 i 处的元素。
我在这里写了关于上述方法的代码:
http://justprogrammng.blogspot.com/2012/06/interviewstreet-find-strings-solution-c.html
但我面临的问题是
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)
此错误出现在少数测试用例中。有人可以告诉我为什么我会收到这个错误,我应该如何纠正这个错误?