JavaScript中存储字符串的空间复杂度是O(1)还是O(n)?
存储字符串的空间复杂度差异说明
两种说法都成立,核心取决于统计空间复杂度的口径和适用场景:
判定为O(1)的场景
- 仅统计字符串指针/引用本身的空间开销时:不管字符串内容长度多少,存储字符串内存地址的指针大小是固定的(32位系统占4字节、64位系统占8字节),不随字符串长度变化,空间复杂度为O(1)。比如C语言中
char *s这个变量本身的空间开销就属于这类。 - 统计算法额外辅助空间时:如果操作字符串的过程中,只用到临时变量、遍历下标,不需要额外开辟和字符串长度成正比的存储空间,额外空间复杂度可判定为O(1)。
判定为O(n)的场景
- 统计字符串内容本身的总存储开销时:长度为n的字符串需要存储n个字符单元(每个字符占1~4字节不等,取决于编码格式),总占用空间和字符串长度n成正比,此时空间复杂度为O(n)。这也是算法题、计算机基础考核中最常用的统计口径。
面试应答建议
回答时先明确统计口径即可:
- 如果没有特殊说明,默认统计存储字符串内容的总开销,回答空间复杂度为O(n),n为字符串长度
- 如果面试官明确问的是指针、额外辅助变量的开销,再说明该部分为O(1)
内容的提问来源于stack exchange,提问作者wiZzz
相关产品推荐
相关产品推荐

