space 复杂性字符串生成器

space complexity string builder

在下面的示例中,如果我输入 String s,space 复杂度是 O(n) 还是 O(1)?如果我只添加元音,它仍然是 O(n) 吗?

String s = "dfgdfgdfga";
StringBuilder sb = new StringBuilder();
for (int i = 0;i <s.length(); i++) {
    sb.append(s.charAt(i));
}
return sb.toString();

Space 复杂性 归结为:你需要多少 "memory" 来存储东西?

您的代码打算基本上复制 String s 的所有内容到StringBuilder sb 中。再次:将所有字符从 a 复制到 sb.

当然可以归结为 O(n),其中 n 表示您需要 更多 内存当您复制 更多 个字符时。如果您开始进行选择,您仍然有 O(n)

O(1) 表示:常量 要求。在谈论制作 copy.

时,这根本不可能(space 明智)

每次附加 StringBuilder 时,它会检查构建器数组是否已填充,如果需要,则将原始数组的内容复制到增加大小的新数组中。所以space要求随着String的长度线性增加。因此 space 复杂度为 O(n).

字母是否为元音并不重要,因为字符串生成器存储字符而不是对字符的引用。

尽管您可能对创建存储对字符对象的引用的 String Builder 的实现感兴趣,但是存储引用比字符更​​昂贵,而且 StringBuilder 是最终的。