作为面试实践的一部分,我写了这个功能。此方法从给定字符串中移除字符。
当涉及到运行时/空间时,我想知道如何使这段代码更高效。我认为我的代码是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;
}发布于 2014-02-28 08:10:36
字符串在Java中是不可变的,所以您的答案实际上会导致创建字符串的len数。这意味着它们被复制了len时间,所以这里有O(N*N)代码。StringBuilder绝对是一种更好的方法。
public static String takeOut(String str, char c) {
int len = str.length();
StringBuilder newstr = new StringBuilder();
for (int i = 0; i < len; i++) {
if (str.charAt(i) != c) {
newstr.append((char)str.charAt(i));
}
}
return newstr.toString();
}一个更简单的方法是使用内置的函数:
public static String takeOut(String str, char c) {
return str.replace(String.valueOf(c), "");
}发布于 2014-02-28 08:07:23
StringBuilder肯定会阻止您的代码在每次迭代中创建新字符串。此外,要删除的字符是否仅包含在字符串中一次?然后,您可以在第一次匹配之后中断for循环。此外,本地存储String#charAt的结果,以避免两次调用该方法。
发布于 2014-02-28 08:10:01
你试过吗
str.replaceAll(c,"");?也许Java-Runtime可以最快地替换(删除).
https://stackoverflow.com/questions/22089524
复制相似问题