【问题标题】:JAVA Optimize char[] to String conversionJAVA优化char[]到String的转换
【发布时间】:2017-01-17 18:00:37
【问题描述】:

这是Hackerrank Question的解决方案

String b = new String(in.nextLine());
char[] bCharArray = b.toCharArray();
for (int i = 0; i < n - 2; i++) {
  if (b.substring(i, i + 3).matches("010")) {
    bCharArray[i + 2] = '1';
    b = new String(bCharArray);
    counter++;
  }
}

现在在 for 循环部分,每次为 String b 创建一个新实例。有没有更好的方法来实现优化的 char[] 到 String 的转换?

【问题讨论】:

  • 等等......你从来没有想过在循环外部创建那个字符串?这不是最明显的变化吗?
  • 不...没用...我需要在每次迭代时保存对字符串的更改
  • 不,你没有,第一个答案告诉你同样的。
  • 不,不是@Tom。我刚看了你说的

标签: java arrays string char


【解决方案1】:

与其在每次迭代中创建一个新字符串,不如在原始 char 数组上工作,只有当你完成修改字符后,才能将其复制到字符串中(如果这是你想要的)。

这里是替代代码:

String b = new String(in.nextLine());
char[] bCharArray = b.toCharArray();
for (int i = 0; i < n - 2; i++) {
    if(bCharArray[i] == '0' && bCharArray[i+1] == '1' && bCharArray[i+2] == '0')
   {
     bCharArray[i+2] = '1';
   }
}

【讨论】:

  • 这很好。但我认为这需要更多时间,因为每次迭代都有很多比较。不是吗?
  • @AnuShibinJosephRaj 你认为创建子字符串和编译正则表达式是免费的吗?
  • 哦...抱歉没有想到 ;)
  • 在我的代码中,每次迭代中恰好有三个比较,这相当于您的比较次数(当您调用方法 substring() 和 matches() 时完成的比较)。所以,不,它不需要更多的时间。事实上,它花费的时间更少,因为它不会在每次迭代中分配额外的字符串。
猜你喜欢
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多