空间复杂字符串构建器

时间:2018-04-02 17:37:50

标签: java string complexity-theory stringbuilder

在下面的例子中,如果我接受String s,空间复杂度是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();

2 个答案:

答案 0 :(得分:2)

空间复杂性归结为:多少&#34;记忆&#34;你需要存放东西吗?

您的代码基本上将<{1}}的所有内容复制到StringBuilder s中。再次:将所有字符从sb复制到a

当然,归结为 O(n)sb表示当您复制 more <时需要 more 内存的事实/ em>字符。如果您开始选择,您仍然有 O(n)

O(1)表示:常量要求。在谈论制作副本时,这是不可能的(空间明智的)。

答案 1 :(得分:0)

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

字母是否为元音无关紧要,因为字符串生成器存储字符而不是字符引用。

虽然您可能有兴趣创建存储String对象的String Builder实现,但是存储引用比Chars更昂贵,StringBuilder也是最终的。