访谈:如何验证一个字符串是否包含另一个字符串?

时间:2012-10-02 00:00:39

标签: algorithm

一般的想法是做两个for循环,从字符串1执行每个字符,比较string2中的每个字符,如果全部查找,则表示包含。 所以我们需要循环来自string1的所有char,并比较所有来自string2的所有字符,这将是O sqaure运行时间。 哪位采访者说这不是个好主意。

在它之后,我正在考虑它。我不能生成一个没有做两个循环的想法。 也许我可以先从string1获取所有字符,转换为asc2,这是建在树中的数字。因此,当与string2进行比较时,它将非常快速地进行搜索。

或者任何人都有更好的主意?

类似string1是abc但string2是cbattt,这意味着每个字符都包含在string2中。 不是子串,

2 个答案:

答案 0 :(得分:1)

正如iccthedral所说,boyer moore可能是面试官所寻找的。

答案 1 :(得分:1)

在文本中搜索给定模式(模式匹配)是一个非常已知的问题。已知的解决方案:

  1. KMP
  2. witness table
  3. boyer-moore
  4. suffix tree
  5. 所有解决方案在某些方面都有所不同,例如,如果它可以推广用于2D模式匹配,或者更多。如果它需要预处理,如果它可以推广到未绑定的字母表,运行时间等等......

    修改
    如果您只想知道某些字符串的所有字母是否出现在其他字符串中,为什么不使用字母大小的表,指示是否可以在字符串中找到给定的字符。如果字母表无界限或非常大(超过 O(1)),请使用哈希表。