以下用于查找不同字符串的算法是否有效?

时间:2012-08-15 17:35:39

标签: string algorithm

我最近发现了一个类似的问题:

"Given an array of strings, return the number of distinct strings in that array."

我提出了这个解决方案:

1. Get number_of_strings, which equals the number of strings in the input array
2. Get number_of_non_redundant, which equals the length of the input array cast as a set
3. Return 2 times number_of_non_redundant - number_of_strings

所以,我的问题是,这个算法是否适用于所有数据集?

4 个答案:

答案 0 :(得分:4)

考虑字符串数组["a", "a", "a", "d", "d", "d"]

number_of_strings是6; number_of_non_redundant是2.您建议退回2 * 2 - 6 = -2。所以......不,你的算法不适用于所有数据集。

除非我对这个问题有很大的误解,否则返回number_of_non_redundant将永远有效,因为它是你想要返回的定义。 :)

答案 1 :(得分:2)

正如其他人所指出的,简单地回归number_of_non_redundant似乎就是这个问题的答案。

以下是确定number_of_non_redundant的可能解决方案:

  

1)创建一个哈希集(特定于语言)

     

2)在数组的每个元素上迭代整个数组   检查哈希集中是否存在该元素,如果不存在,则添加   它

     

3)返回哈希集的大小。

在此使用哈希集提供恒定时间操作(添加,包含)。

此外,我想指出你不能(至少我不会在语言中注意到这一点)只需数组转换为集合。 Casting 是一个恒定时间操作。这是两种不同的数据结构,为了从数组中获取元素并将它们放在一个集合中,它需要遍历数组并将元素输入到集合中。

答案 2 :(得分:0)

首先按字典顺序对数组进行排序,然后使用标志变量对其进行循环,以跟踪元素i-th和第(i-1)-th之间的变化?

答案 3 :(得分:0)

此算法不会适用于所有数据集。它可能适用于具体的例子。

say n = number of non redundant strings 
p = number of strings in original array 

根据你2n-p = n => n= p

您的算法仅在(number of non redundant strings = length of original array)时有效,这意味着仅当原始数组是一个集合时。

只是提示一下,解决这个问题的理想方法是散列,如果你有足够的可用内存,或者你可以使用排序来实现它,但与散列相比需要更长的时间