给出'n'个字符串w1,w2,......,wn。设Si表示通过考虑字符串wi的所有唯一子串形成的字符串集合。子字符串被定义为字符串中一个或多个字符的连续序列。有关子字符串的更多信息可以在这里找到。假设'S'= {S1 U S2 U ... Sn} .i.e'S'是通过考虑所有集合S1,S2,... Sn中的所有唯一字符串而形成的一组字符串。您将收到很多查询,并且对于每个查询,您将得到一个整数'k'。你的任务是从集合'S'中输出字典中第k个最小的字符串。InterviewStreet查找字符串
输入:
输入的第一行包含一个整数“N”,表示字符串的数目。下一个'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)
此错误是出现在一些测试用例。有人可以告诉我为什么我得到这个错误,我应该如何纠正这个错误?
这意味着你用完堆内存。还没有彻底读完它,但是如果你存储了每一个可能的子串,它看起来像你可能存储了大量字符串的地狱。 – BoBTFish
没错,那么我应该怎么做才能改变方法? – sachin
一个需要的地方存放这些子(或一组),如果一个人到最后打印从字典有序集合子 – sachin