这是一个访谈问题:设计数据结构以有效地执行以下操作:boolean isPrefix(String s1, String s2)
。
我想我们可以创建一个multimap
,它将前缀映射到它们的字符串。例如,
strings: "aa", "ab", "abc", "ba", "ca" multimap: "a" -> ["aa", "ab", "abc"] "aa" -> ["aa"] "ab" -> ["ab", "abc"] "abc" -> ["abc"] "ba" -> ["ba"] "ca" -> ["ca"]
您建议使用哪种数据结构?
答案 0 :(得分:4)
trie数据结构似乎是一个明显的答案,但所述问题不需要高级数据结构。一个简单的字符串比较就足够了,速度非常快。最终,如果要验证一个字符串是另一个字符串的前缀,则必须比较相应位置的每个字符。没有数据结构消除了逐个字符比较的需要。
话虽如此,如果您在大量文本中搜索中的前缀,还有其他技术,例如Rabin-Karp probablistic string matching。
答案 1 :(得分:1)
前缀信息最有效的存储可能是trie。
在此,字符串对应于树中的节点,其中一个字符串具有另一个字符串作为前缀,当其节点在树中位于另一个节点之下时。