【问题标题】:space complexity string builder空间复杂度字符串生成器
【发布时间】:2018-09-11 22:40:46
【问题描述】:

在下面的示例中,如果我采用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();

【问题讨论】:

  • n 是什么? String 的长度?怎么可能到O(1)
  • 因为它是一个未排序的字符列表的迭代,我认为它是 O(n)

标签: java string complexity-theory stringbuilder


【解决方案1】:

空间复杂度归结为:存储东西需要多少“内存”?

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

当然,这归结为 O(n)n 表示复制时需要 更多 内存的事实更多 字符。如果您开始进行选择,您仍然有 O(n)

O(1) 表示:恒定要求。在谈论制作副本时,这根本是不可能的(空间方面)。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多