【发布时间】:2016-07-18 06:54:02
【问题描述】:
我编写了一个程序来从第二个字符串中删除第一个字符串中存在的字符。复杂度为 BigO(n^2)。是否可以进一步降低复杂度?
public class Tmp {
public static void main(String[] args) {
String s = "halloween";
String s1 = "halcyon";
char[] ss = s.toCharArray();
char[] ss1 = s1.toCharArray();
for(int i=0;i<ss.length;i++){
for(int j=0;j<ss1.length;j++){
if(ss1[j] == ss[i]){
ss1[j] = 'x'; //Replace the common char with x
}
}
}
System.out.println(Arrays.toString(ss1));
}
}
输出
[x, x, x, c, y, x, x]
【问题讨论】:
-
您可以将您的代码放在代码审查中以获得更好的结果。 codereview.stackexchange.com
-
是的,您可以将其缩减为
O(n log n)。 -
将 string1 的所有字符添加到集合 (
O(n))。接下来,对于 string-2 中的每个 char,在 set-1 上使用contains(),如果该 char 存在,则将其设置为 'x' (O(n))