我正在尝试构建一个android应用程序,用户可以输入一个字符串,与该字符串相关的列表emoji就会出现。(就像Venmo应用程序)例如:
案例1:用户输入“pizz”,列表中会有“”,请注意,用户输入的是“pizz”,而不是pizza!
案例2:用户输入“rabb”,列表中会有“”和“”,请注意,用户输入的是“rabb”,而不是rabbit!
对于这个问题,什么样的数据结构和算法比较好?
最佳答案
你要找的是一个trie从Wikipedia
trie,也称为数字树,有时也称为基树或前缀树(因为它们可以通过前缀进行搜索),是一种搜索树,一种有序的树数据结构…
trie类似于HashMap<K,V>
,您可以使用键执行查找并获取值不同的是,您还可以按前缀进行搜索给定一个前缀,它将找到结构中具有该前缀的所有键值对。它基本上是生成搜索建议的数据结构。
总体思路:
Trie<String, String> t = new Trie<String, String>();
t.insert("pizza", "🍕");
t.insert("rabbit1", "🐇");
t.insert("rabbit2", "🐰");
// then later...
t.findByPrefix("rabb"); // [🐇,🐰]
不幸的是,tries过于泛型,在任何流行的数据结构库中都不存在(例如,java collections框架或google guava)。你必须自己实现一个或者找到一个现有的实现并修改它。
我建议:
学习理论。看这个videoYouTube上还有很多东西可以教你基本知识你也可以在google上搜索“N-way trie”并阅读相关注释。
接受这个类并修改它。它与你所需要的非常相似(或者已经非常完美):http://algs4.cs.princeton.edu/52trie/TrieST.java.html具体参见
TrieST
方法。