java - 反向字符串和附加后缀的性能测量

标签 java string algorithm

我正在阅读有关字符串反转的内容:

第一个代码:

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 页上,关于后缀的排列在这里使用字符串更好。

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

有人可以帮我吗?

最佳答案

在第一个代码中:

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,那么rev的内容就是追加,然后追加s.charAt(i),然后将StringBuilder转换为String。那将是 s.length() - 1 StringBuilder 和相同数量的字符串。

在第二个版本中:

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 和一个 String。

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

关于java - 反向字符串和附加后缀的性能测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19806377/

相关文章:

java - 如何获取用户输入,将其添加到新扫描仪,然后将输入扫描到数组中?

java - 如何删除Java中二维数组中的空格?

javascript - unicode字符串中每个字符的二进制数据如何与下一个字符的二进制数据分开?

算法:选择集合的公共(public)元素

c - 二进制搜索算法的平均性能?

java - 使用 Spring 和参数化运行 JUnit

java - 填充 TreeMap 会抛出 NullPointerException

java - 这段代码会在 UI 线程中运行吗?

java - JSP 中 getRequestDispatcher 的路径问题

algorithm - 实现过量质量或质量体积曲线