【发布时间】:2014-04-01 02:56:20
【问题描述】:
我编写了这个函数作为面试练习的一部分。此方法从给定字符串中删除一个字符。
我想知道如何让这段代码在运行时/空间方面更有效率。我认为我的代码是 O(n),我不确定是否可以提高效率。但是,也许使用诸如 StringBuffer 或 StringBuilder 之类的东西会增加一点?不确定,因为我对 Java 还是有点陌生。
public static String takeOut(String str, char c) {
int len = str.length();
String newstr = "";
for (int i = 0; i < len; i++) {
if (str.charAt(i) != c) {
newstr = newstr + str.charAt(i);
}
}
return newstr;
}
【问题讨论】:
-
不,这绝对是不是 O(n)。想想
newstr = newstr + str.charAt(i)需要做什么。想象一下,所有 n 个字符都不是您要查找的字符。 (是的,StringBuilder 就是您要找的东西。)请参阅 yoda.arachsys.com/java/stringbuffer.html - 很久以前写的,但只需在任何地方将StringBuffer替换为StringBuilder。 -
replaceAll()呢? -
为什么不使用
str.replaceAll(c+"","")? -
我应该在问题中提到尝试不使用 replaceAll 作为挑战的一部分