所以我试图想出一个算法来查找字符串数组中带有特定字符/字母的单词。
如果我想要带有元音e的单词,我会从下面的单词中获得单词apple和hello。
{apple,bird,hello}
要查找具有特定字符的单词,我是否需要查看数组中的所有字母并查看每个单词的每个字符?
是否有一种聪明的方法可能是通过对列表进行排序然后以某种方式进行搜索?
此外,该算法的运行时间是多少? 它会被视为O(n)还是O(n * m)? 其中n是字典中单词的数量,m是数组中每个单词的长度。
答案 0 :(得分:3)
要查找具有特定字符的单词,您需要至少读取一次该字符。因此,您必须从每个单词到达每个字符一次,给出运行时间O(n * m),其中n是单词的数量,m是平均单词长度。所以是的,你需要从每个单词中查找每个字符。
现在,如果您要对不同的字母进行大量查询,您可以对所有单词进行一次传递,并将这些单词映射到它们所分离的字符。即apple => a,p,l,e集。然后你会有26套用所有单词包含该字符('a':[apple],'b':[bird],'c':[],...'l':[apple,你好], ...)。随着查询数量相对于单词集大小的增加,最终会得到一个分摊的O(1)查找时间 - 尽管你仍然有一个O(n * m)初始化复杂度。