string - String.contains() 的时间复杂度

标签 string algorithm time-complexity

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

最佳答案

如果不知道您感兴趣的 String.contains() 的实际实现,就没有答案;或者您打算使用什么算法。

一个完全幼稚的实现可能需要(n+1-k)*k比较来确定长度为n的给定字符串不包含长度为特定的子字符串k。最坏情况下的时间复杂度为 O(nk)

即使在第一次不等比较后停止子字符串比较,虽然系数较小,但仍然是O(nk)。构造一个由许多独立字母重复组成的字符串,每个字母之间恰好由 k-1 空格分隔,并在其中搜索 k 个连续空格的出现。搜索将会失败,但每个子字符串比较都需要进行摊销 k/2 比较才能找到答案,而且您的时间仍然是 O(nk)

如果已知 k 远小于 n,您可以将其视为 O(n)

平均情况取决于实际使用的算法,也取决于两个字符串中字符的分布;而且你还没有说其中任何一个是什么。

关于string - String.contains() 的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51391513/

相关文章:

java - 有没有办法去掉重音符号并将整个字符串转换为常规字母?

performance - 基数排序的最佳基础

c++ - 从平面方程生成点网格的算法

c - 有什么办法可以在不增加变量的情况下解决这个数学问题吗?

c# - 追加到空字符串在 C# 中如何工作?

java - 仅检查字符串中整数的工作解决方案?

python - 在循环中逐字符迭代字符串

time-complexity - 用两个参数确定算法的运行时间

javascript - JAVASCRIPT中js indexOf()方法背后的算法

java - 迭代 Java 集合时最小化复杂度算法