Thu. Nov 21st, 2024

Given two equal-size strings s and t. In one step you can choose any character of t and replace it with another character.

Return the minimum number of steps to make t an anagram of s.

An Anagram of a string is a string that contains the same characters with a different (or the same) ordering.

Example 1:

Input: s = "bab", t = "aba"
Output: 1
Explanation: Replace the first 'a' in t with b, t = "bba" which is anagram of s.

Example 2:

Input: s = "leetcode", t = "practice"
Output: 5
Explanation: Replace 'p', 'r', 'a', 'i' and 'c' from t with proper characters to make t anagram of s.
class Solution {
    public int minSteps(String s, String t) {
        if(t.equals(s)){
            return 0;
        }
        
        char s_sort[] = s.toCharArray();
        Arrays.sort(s_sort);
        String s_sorted = new String(s_sort);
        
        char t_sort[] = t.toCharArray();
        Arrays.sort(t_sort);
        String t_sorted = new String(t_sort);
        
        //System.out.println(s_sorted);
        //System.out.println(t_sorted);
        
        if(s_sorted.equals(t_sorted)){
            return 0;
        }
        
        int counter = 0;
        Map<String,Integer> s_map = getFreqMap(s);
        Map<String,Integer> t_map = getFreqMap(t);
        
        //System.out.println(s_map);
        //System.out.println(t_map);
        for(String s1: s_map.keySet()){
            if(t_sorted.contains(s1)){
                if(t_map.get(s1) < s_map.get(s1)){
                    counter = counter + s_map.get(s1) - t_map.get(s1);
                }
            }else{
                counter = counter + s_map.get(s1);
            }
        }
        return counter;
    }
    
    public Map<String,Integer> getFreqMap(String s){
        Map<String,Integer> freqMap = new TreeMap<String,Integer>();
        for(char c:s.toCharArray()){
            freqMap.put(c+"",freqMap.getOrDefault(c+"",0)+1);
        }
        return freqMap;
    }
}