查找一个字符串是否是另一个字符串的前缀的数据结构

时间:2012-01-02 11:03:03

标签: algorithm language-agnostic data-structures

这是一个访谈问题:设计数据结构以有效地执行以下操作: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"]

您建议使用哪种数据结构?

2 个答案:

答案 0 :(得分:4)

trie数据结构似乎是一个明显的答案,但所述问题不需要高级数据结构。一个简单的字符串比较就足够了,速度非常快。最终,如果要验证一个字符串是另一个字符串的前缀,则必须比较相应位置的每个字符。没有数据结构消除了逐个字符比较的需要。

话虽如此,如果您在大量文本中搜索中的前缀,还有其他技术,例如Rabin-Karp probablistic string matching

答案 1 :(得分:1)

前缀信息最有效的存储可能是trie

在此,字符串对应于树中的节点,其中一个字符串具有另一个字符串作为前缀,当其节点在树中位于另一个节点之下时。