• + 0 comments

    Minimalist O(n) solution:

        public static int anagram(String s) {
            if (s.length() % 2 != 0) return -1;
            
            int size = s.length() / 2;
            int[] s1 = new int[26];
            int base = 'a';
            int changes = 0;        
    
            //build first half
            for (int i = 0; i < size; i++) {
                s1[s.charAt(i) - base] ++;
            }
    
            //check second half
            for (int i = size; i < size*2; i++) {
                if (s1[s.charAt(i) - base] > 0) s1[s.charAt(i) - base]--;
                else changes++;
            }
    
            return changes;
        
        }