【发布时间】:2011-08-02 18:46:10
【问题描述】:
从网上的笔记中,我读到了下面的 java 代码 sn-p 用于反转一个字符串,据称它具有二次时间复杂度。在我看来,i 的“for”循环只是迭代了 s 的整个长度。它是如何导致二次时间复杂度的?
public static String reverse(String s)
{
String rev = new String();
for (int i = (s.length()-1); i>=0; i--) {
rev = rev.append(s.charAt(i));
}
return rev.toString();
}
【问题讨论】:
-
你也连接到字符串,这是相当昂贵的,因为它们是不可变的。 (你的代码有一些错误,它不会编译)
-
这不会反向返回字符串,因为它总是会为其添加一个额外的空间。
-
为什么有人写这个,而不是仅仅使用 String 的
reverse方法是我无法理解的(除非他们想要额外的空间,这只是......奇怪)。 -
令 n = s 的长度, f 为算法的时间复杂度函数。如果算法只是迭代 s 的整个长度,那么必须存在一些常数 a 和 b 使得 f(n)b.
标签: java string algorithm data-structures