2013-01-02 36 views
2

我的朋友在他的访谈中被问到了一些问题。使用集合生成子串

如何找到给定字符串的所有可能的子字符串? 我知道这可以使用许多技术来解决,但后来给了他一个暗示,那就是使用它。

我无法弄清楚如何使用集合。有人可以澄清一下吗?

+1

是应该是时间或空间效率? – Woot4Moo

+2

设置确保唯一性.. –

+0

有没有更多的时间或空间被询问的细节 – apgp88

回答

3

根据定义,集合只包含元素的一个副本。使用集合来解决这个问题将消除在输出集合中包含重复子字符串的可能性。

比方说,你遍历字符串:

aabbaa 

寻找长度为二子,并将其添加到一组,当您去。

你会发现:

aa 
ab 
bb 
ba 
aa 

第一和最后一项是重复的,所以一个将被丢弃。

+0

我明白了。类似的可以通过将输出字符串放在hashmap中来完成,对吗? – apgp88

+0

@AmolPatil HashMap(至少在Java中,我不确定其他语言)使用键值对来存储数据。我认为这不是对这个问题的明智的数据结构选择。你可以使用每个子字符串作为键和值,但这将是一种奇怪的做事方式。 –

+0

HashSet(使用Java)的实现实际上是创建一个HashMap ,其中集合中的所有关键字映射到同一个虚拟对象,所以是的,你可以直接使用HashMap(但它会更笨拙)。 – James