我的采访者让我为FLAMES Game
编写优化代码游戏规则如下。
1 - 取两个名字(即 - 'naveen'和'tejveer')
2 - 比较这两个字符串以获得非常见的字符,如
NA的 VEE 名词
t e j ve 呃
粗体字符在两者中都很常见,应该删除
注意 - 如果在string1中有两个字符出现,而在另一个字符串中出现相同的字符3次,那么有两个字符被视为普通字符,一个字符被视为不常见
3 - 删除常用字符(本例'e','v','e'中的三个常用字符)
4 - 获取剩下的字符数(删除常用字符后剩下7个字符,这些字符是 - n,a,n,t,e,j,r。)
我写了这两个函数。 //这是正常的功能(没有两个优化)
private static void flames2(String name1 , String name2){
int n1Length = name1.length();
int n2Length = name2.length();
StringBuilder target;
StringBuilder player;
int oCounter;
int iCounter;
if(n1Length > n2Length){
player = new StringBuilder(name1);
target = new StringBuilder(name2);
oCounter = n1Length;
iCounter = n2Length;
}else{
player = new StringBuilder(name2);
target = new StringBuilder(name1);
oCounter = n2Length;
iCounter = n1Length;
}
int matches = 0;
for(int i = 0; i< oCounter ; i++){
for(int j = 0;j < iCounter ; j++){
if(player.charAt(i) == target.charAt(j)){
char chTemp = target.charAt(j);
target.setCharAt(j , target.charAt(iCounter-1));
target.setCharAt(iCounter-1 , chTemp);
iCounter--;
matches++;
break;
}
}
}
int unmatchedChars = name1.length()+name2.length()-2*matches;
System.out.println("result "+unmatchedChars);
}
然后他告诉我通过使用一个for循环来解决这个问题,我尝试了这个稍微优化的功能。
private static void flames3(String name1 , String name2){
int n1Length = name1.length();
int n2Length = name2.length();
StringBuffer target;
String player;
int oCounter;
if(n1Length < n2Length){
target = new StringBuffer(name2);
player = name1;
oCounter = n1Length;
}else{
target = new StringBuffer(name1);
player = name2;
oCounter = n2Length;
}
int matches = 0;
for(int i = 0; i< oCounter ; i++){
int index = target.toString().indexOf(player.charAt(i));
if(index >= 0){
target.setCharAt(index,'_');
matches++;
}
}
int unmatchedChars = name1.length()+name2.length()-2*matches;
System.out.println("result "+unmatchedChars);
}
但是在函数flames3中我使用的是String.IndexOf(),它使用for循环来检查字符。
在这些函数中,我只是计算匹配的字符。 所以有一种方法可以编写更多优化的函数。
答案 0 :(得分:-1)
以下事情可能会以优化的方式正常工作。
public void flames(String name1, String name2) {
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
for (int i = 0; i < name1.length(); i++) {
list1.add(String.valueOf(name1.charAt(i)));
}
for (int i = 0; i < name2.length(); i++) {
list2.add(String.valueOf(name2.charAt(i)));
}
List<String> union = new ArrayList<String>(list1);
union.addAll(list2);
List<String> intersection = new ArrayList<String>(list1);
intersection.retainAll(list2);
union.removeAll(intersection);
for (String n : union) {
Log.d("item", n);
}
}