1

我正在阅读有关字符串反转的信息:

第一个代码:

public static String reverse(String s) {
  String rev = "";
  for (int i = s.length() - 1; i >= 0; i--)
     rev += s.charAt(i);
  return rev;
}

第二个代码:

public static String reverse(String s) {
   StringBuilder rev = new StringBuilder();
   for (int i = s.length() - 1; i >= 0; i--)
      rev.append(s.charAt(i));
   return rev.toString();
}

有人提到,使用字符串我们有二次时间,使用字符串生成器我们有线性时间。

在第 9 页上,关于使用字符串的后缀排列更好。

我不明白作者在上述两种情况下是如何得出结论的。

任何人都可以在这里帮助我吗?

4

2 回答 2

0

在第一个代码中:

public static String reverse(String s) {
   String rev = "";
   for(int i = s.length() - 1; i >= 0; i--)
      rev += s.charAt(i);
   return rev;
}

每次执行时rev += s.charAt(i);StringBuilder都会创建 a ,然后附加 的内容rev,然后s.charAt(i)附加,然后StringBuilder将其转换为String。那将是s.length() - 1 StringBuilders 和相同数量的字符串。

在第二个版本中:

public static String reverse(String s) {
   StringBuilder rev = new StringBuilder();
   for(int i = s.length() - 1; i >= 0; i--)
      rev.append(s.charAt(i));
   return rev.toString();
}

将只有一个StringBuilder和一个字符串。

关于您的第二个困惑,您能否详细说明一下?很难说作者的意思。

于 2013-11-06T07:38:16.320 回答
0

“java.lang.StringBuffer”类包含“reverse”方法,您可以使用它来代替自己编写的代码。

于 2013-11-06T08:43:01.443 回答