В ответ на проблему Hackerank: https://www.hackerrank.com/challenges/ctci-making-anagrams/problem, где нужно найти число в виде целого числа символов, которые необходимо удалить из строки, чтобы сделать ее анаграммой другой строки.
Я выполнил код, и программа прошла тестирование, но мне нужна помощь в повышении его эффективности. Как мне go подумать, как повысить эффективность следующего кода?
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Hackerank {
// Complete the makeAnagram function below.
static int makeAnagram(String a, String b) {
int letterToRemoveCount = 0;
Set<Character> characterMapA = new HashSet<>();
Set<Character> characterMapB = new HashSet<>();
for(int i = 0; i< a.length(); i++) {
if (!characterMapA.contains(a.charAt(i))) {
characterMapA.add(a.charAt(i));
if ((countOccurences(a.charAt(i), a) - countOccurences(a.charAt(i), b)) != 0) {
letterToRemoveCount += Math.abs((countOccurences(a.charAt(i), a) - countOccurences(a.charAt(i), b)));
}
}
}
for (int j = 0; j<b.length(); j++){
if (!characterMapB.contains(b.charAt(j)) && !characterMapA.contains(b.charAt(j))) {
characterMapB.add(b.charAt(j));
if ((countOccurences(b.charAt(j), a) - countOccurences(b.charAt(j), b)) != 0) {
letterToRemoveCount += Math.abs((countOccurences(b.charAt(j), a) - countOccurences(b.charAt(j), b)));
}
}
}
return letterToRemoveCount;
}
public static int countOccurences(char m, String s){
int count = 0;
for(int i = 0; i< s.length(); i++){
if(s.charAt(i) == m){
count++;
}
}
return count;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
System.out.println(makeAnagram("fcrxzwscanmligyxyvym", "jxwtrhvujlmrpdoqbisbwhmgpmeoke"));
}
}