给定n
个字符串S1, S2, ..., Sn
,并设置字母集A={a_1,a_2,....,a_m}
。假设每个字符串中的字母都是不同的。现在我想为每个a_i (i=1,2...,m)
创建一个倒排索引。我的倒排索引还有一些特别之处:A
中的字母表按顺序排列,如果在倒排索引中a_i包含一个字符串(比如S_2
),那么a_j (j=i+1,i+2,...,m)
我们不再需要包含S_2
。简而言之,每个字符串只出现在倒置列表中一次。我的问题是如何快速有效地建立这样的清单?任何时候复杂性都有限?
例如,A={a,b,e,g}, S1={abg}, S2={bg}, S3={gae}, S4={g}
。然后我的倒排名单应该是:
a: S1,S3
b: S2 (since S1 has appeared previously, so we don't need to include it here)
e:
g: S4
答案 0 :(得分:3)
如果我理解你的问题,一个简单的解决方案是:
for each string in n strings
find the "smallest" character in the string
put the string in the list for the character
复杂度与字符串的总长度成正比,乘以订单测试的常量。
如果有一种简单的测试方法,(例如字符按字母顺序排列,所有小写字母,一个<就足够了),只需比较它们;否则,我建议使用哈希表,每一对都是一个字符及其顺序,稍后只需比较它们。