String.contains()的时间复杂度

时间:2018-07-17 23:29:23

标签: string algorithm time-complexity

String.contains()的时间复杂度是多少? 假设n是要与另一个长度为k的字符串进行比较的字符串的长度。

1 个答案:

答案 0 :(得分:1)

在不知道您感兴趣的String.contains()的实际实现的情况下没有答案。或您打算使用什么算法。

一个完全幼稚的实现可能需要进行(n+1-k)*k比较才能确定长度为n的给定字符串不包含长度为k的特定子字符串。最糟糕的情况是O(nk)

即使在第一次不相等比较之后停止子字符串比较,尽管系数较小,但仍然是O(nk)。构造一个字符串,该字符串是许多孤立的字母的重复,每个字母之间都精确地由k-1分隔,并搜索是否出现k个连续的空格。搜索将失败,但是每个子字符串比较将进行摊销的k/2比较才能找到答案,并且您仍然处于O(nk)

如果已知kn小得多,则可以将其视为O(n)

平均大小写取决于所使用的实际算法,还取决于两个字符串中字符的分布;而且您还没有说这两个是什么。