给出1000个长度为100个字符的字符串。任务是计算每个字符串的最小子字符串的长度,这在1000个字符串生成的所有子字符串中是唯一的。
为每个字符串生成长度为1-100的所有子字符串并将其存储在地图中,如果找到重复的子字符串,则继续增加计数。
从长度1开始,为每个字符串重新生成所有子字符串,如果长度为L的任何子字符串的计数为1,则输出L。
针对上述问题的任何其他最佳方法都是可观的。
答案 0 :(得分:0)
创建char *数组,每个元素都指向字符串中的每个符号。对于您的问题,数组大小为100x1000 = 100000个char *指针。 O(N)
将此数组排序为“按字母顺序排列的字符串”。 O(N *日志(N))
扫描字符串,并为每个[i]字符串搜索max_eq_prefix 在这个字符串和字符串[i + 1]和[i-1]之间。 对于第一个和最后一个字符串运行单个比较,使用[i + 1] 首先,[i-1]为最后一个。 O(N)
具有最小max_eq_prefix的字符串是您的子字符串, 长度是长度(max_eq_prefix)+ 1。
找出max_eq_prefix的例子:
i-1:aabala
i: aabumba
i+1:acron
对于string [i],max_eq_prefix是aab。所以,唯一的子串是“aabu”。
如您所见,这是一种极小极大算法。