Sort by

recency

|

976 Discussions

|

  • + 0 comments

    include

    include

    using namespace std;

    /*Think of it this way: e.g.xaxb|bbxx left : 2x 1a 1b right: 2x 0a 2b , and they cancle out. What is left in the right is the answer.

    O(n) per query*/

    int arr[26];

    int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);

    int q;
    cin >> q; 
    
    string str; 
    while(q--) {
        cin >> str; 
        if(str.size() % 2) { cout << -1 << '\n'; continue; }
    
        int mid = str.size() >> 1; 
    
        for(int i = 0; i < mid; ++i) ++arr[str[i] - 'a']; 
    
        int ret = 0; 
        for(int i = mid; i < str.size(); ++i) {
            if(arr[str[i] - 'a']) --arr[str[i] - 'a']; 
            else ++ret; 
        }
    
        cout << ret << '\n'; 
        memset(arr, 0, sizeof(arr)); 
    }
    
    return 0; 
    

    }

  • + 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;
        
        }
    
  • + 0 comments
    # Anagram
    from collections import Counter
    def anagram(s):
        len_s = len(s)
        result = -1
        if len_s % 2 == 0:
            l, r = Counter(s[:len_s // 2]), Counter(s[len_s // 2:])
            result = sum((r - l).values())
        return result
    
  • + 0 comments
    fun anagram(s: String): Int {
        // Write your code here
        if(s.length % 2 !=0)
            return -1
        var res = 0
        val middle = s.length/2
        var sub1 = s.subSequence(0, middle)
        var sub2 = s.subSequence(middle,s.length)
        var s1 = StringBuilder(sub1)
        var s2 = StringBuilder(sub2)
        for(c in s1){
            if(s2.contains(c)){
                val index = s2.indexOf(c)
                s2.deleteCharAt(index)
            }else
                res++
        }
        return res
    }
    
  • + 0 comments

    rust answer

    fn anagram(s: &str) -> i32 {
        let mut counter = vec![0;26];
        let chs: Vec<char> = s.chars().collect();
        let mut res = 0;
        let mut idx:usize = 0;
        
        if chs.len() % 2 == 1 {
            return -1;
        }
        
        for i in 0..chs.len()/2 {
            idx = (chs[i] as u32 - 'a' as u32) as usize;
            counter[idx] = counter[idx] + 1;
        }
        for i in chs.len()/2..chs.len() {
            idx = (chs[i] as u32 - 'a' as u32) as usize;
            if counter[idx] == 0 {
                res += 1;
            } else {
                counter[idx] = counter[idx] - 1;
            }
        }
        
        res
    
    }