我正在尝试构建一个用户可以输入字符串的Android应用程序,并显示与该字符串相关的列表表情符号。 (就像Venmo app一样)例如:
案例1:用户输入“pizz”,在列表中会出现“”,请注意用户输入“pizz”,而不是披萨! 案例2:用户输入“rabb”,在列表中会有“”和“”,请注意用户输入“rabb”,而不是兔子!
这个问题有什么好的数据结构和算法?
答案 0 :(得分:3)
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"); // [,]
不幸的是,尝试过于通用,并且不存在于任何流行的数据结构库(例如Java Collections Framework或Google Guava)中。您必须自己实现一个或找到现有的实现并进行修改。 我建议:
TrieST
并修改它。它与您的需求非常相似(或已经完美):http://algs4.cs.princeton.edu/52trie/TrieST.java.html具体参见keysWithPrefix
方法。