You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java:基于字符串长度的循环时间复杂度是O(n)还是O(1)?

关于这个for循环的时间复杂度分析

嘿,这个问题问得特别到位,咱们拆解开来说清楚:

首先得明确时间复杂度里的n到底指什么——它代表的是输入的规模。在这段代码里,输入是text这个字符串,它的长度就是咱们要关注的输入规模,完全可以把text.length()记作n。

接下来看循环本身:

  • 循环从i=0开始,直到i < text.length()结束,总共会执行text.length()次,也就是n次。
  • 循环体里的result += text.charAt(i)是O(1)的常数时间操作——因为Java的String.charAt()是直接访问内部字符数组的下标,不管字符串多长,这个操作的耗时都是固定的。

既然循环执行n次,每次都是O(1),那整体的时间复杂度就是O(n)。

为什么不是O(1)呢?O(1)意味着不管输入规模多大,代码的执行时间都是固定的。但这个循环明显会跟着输入字符串的长度变化:比如输入10个字符的字符串,循环跑10次;输入1000个字符,就跑1000次,耗时会线性增长,所以绝对不是O(1)。

另外补充个小细节:Java里的text.length()本身是O(1)操作,因为String类内部会维护一个记录长度的字段,调用length()时直接返回这个值,不会额外遍历字符串,所以这个获取长度的步骤不会影响整体的时间复杂度。

内容的提问来源于stack exchange,提问作者Kodean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:24:11