Anagram – HackerRank Solution

In this post, we will solve Anagram HackerRank Solution. This problem (Anagram) is a part of HackerRank Problem Solving Series.

Solution – Anagrams – HackerRank Solution

C++

#include <iostream>
#include <string>
#include <map>

using namespace std;

int getChangesToAnagram(string s1, string s2) {
    int total, N1;
    int N2 = s2.size();
    map<char, int> charCount;

    total = N1 = s1.size();

    if (N1 != N2) return -1;

    for (int i = 0; i < N2; i++)
        charCount[s2[i]]++;

    for (int i = 0; i < N1; i++) {
        if (charCount[s1[i]] > 0) {
            total--;
            charCount[s1[i]]--;
        }
    }

    return total;
}

int main() {
    int N;
    cin >> N;

    for (int i = 0; i < N; i++) {
        string s;
        cin >> s;
        cout << getChangesToAnagram(s.substr(0, s.size() / 2), s.substr(s.size() / 2)) << endl;
    }
}

Python

#!/bin/python3

import sys
from collections import Counter

def anagram(s):
    if len(s)%2 == 1:
        return -1
    
    res = 0
    
    cnt1 = Counter(s[:len(s)//2])
    cnt2 = Counter(s[len(s)//2:])
    cnt3 = {}
    
    for let, val in cnt1.items():
        cnt3[let] = abs(val - cnt2[let])
    for let, val in cnt2.items():
        cnt3[let] = abs(val - cnt1[let])
        
    for el in cnt3.values():
        res += el
    
    return res//2

q = int(input().strip())
for a0 in range(q):
    s = input().strip()
    result = anagram(s)
    print(result)

Java

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    static int anagram(String s){
        if (s.length() % 2 != 0) { return -1; }
        int[] cache = new int[70];

        for (int i = 0; i < s.length() / 2; i++) {
            cache[Character.getNumericValue(s.charAt(i))]++;
        }

        for (int i = s.length() / 2; i < s.length(); i++) {
            if (cache[Character.getNumericValue(s.charAt(i))] > 0) {
                cache[Character.getNumericValue(s.charAt(i))]--;
            }
        }

        int counter = 0;
        for (int i = 0; i < 70; i++) {
            counter += cache[i];
        }

        return counter;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int q = in.nextInt();
        for(int a0 = 0; a0 < q; a0++){
            String s = in.next();
            int result = anagram(s);
            System.out.println(result);
        }
    }
}

Note: This problem (Anagrams) is generated by HackerRank but the solution is provided by CodingBroz. This tutorial is only for Educational and Learning purpose.

Leave a Comment

Your email address will not be published. Required fields are marked *