String.contains()的时间复杂性
String.contains()的时间复杂度是多少;String.contains()的时间复杂性,string,algorithm,time-complexity,String,Algorithm,Time Complexity,String.contains()的时间复杂度是多少; 假设n是与另一个长度为k的字符串进行比较的字符串的长度。如果不知道您感兴趣的字符串的实际实现,则没有答案;或者你打算使用什么算法 一个完全幼稚的实现可能需要进行(n+1-k)*k比较,以确定给定长度n的字符串不包含长度k的特定子字符串。对于最坏的情况,这就是O(nk) 即使在第一次不相等比较之后停止子字符串比较,虽然系数较小,但仍然是O(nk)。构造一个字符串,它是许多孤立字母的重复,每个字母之间用k-1空格隔开,然后搜索该字符串中出现的k
假设n是与另一个长度为k的字符串进行比较的字符串的长度。如果不知道您感兴趣的字符串的实际实现,则没有答案;或者你打算使用什么算法 一个完全幼稚的实现可能需要进行
(n+1-k)*k
比较,以确定给定长度n
的字符串不包含长度k
的特定子字符串。对于最坏的情况,这就是O(nk)
即使在第一次不相等比较之后停止子字符串比较,虽然系数较小,但仍然是O(nk)
。构造一个字符串,它是许多孤立字母的重复,每个字母之间用k-1
空格隔开,然后搜索该字符串中出现的k个连续空格。搜索将失败,但每个子字符串比较都将进行摊销k/2
比较才能找到答案,而您仍然处于O(nk)
如果已知k
远小于n
,则可以将其视为O(n)
平均大小写取决于实际使用的算法,也取决于两个字符串中字符的分布;您还没有说这两个是什么。如果不知道您感兴趣的字符串.contains()的实际实现,就没有答案;或者你打算使用什么算法 一个完全幼稚的实现可能需要进行
(n+1-k)*k
比较,以确定给定长度n
的字符串不包含长度k
的特定子字符串。对于最坏的情况,这就是O(nk)
即使在第一次不相等比较之后停止子字符串比较,虽然系数较小,但仍然是O(nk)
。构造一个字符串,它是许多孤立字母的重复,每个字母之间用k-1
空格隔开,然后搜索该字符串中出现的k个连续空格。搜索将失败,但每个子字符串比较都将进行摊销k/2
比较才能找到答案,而您仍然处于O(nk)
如果已知k
远小于n
,则可以将其视为O(n)
平均大小写取决于实际使用的算法,也取决于两个字符串中字符的分布;您还没有说明这两个选项是什么。没有具体说明。一个简单的实现应该是O(n*k)
,但是有更快的算法,Javadoc中没有说明使用哪种算法,也没有指定。一个简单的实现应该是O(n*k)
,但是有更快的算法,Javadoc中没有说明使用哪种算法,