Two strings word1 and word2 are considered almost equivalent if the differences between the frequencies of each letter from 'a' to 'z' between word1 and word2 is at most 3.

Given two strings word1 and word2, each of length n, return true if word1 and word2 are almost equivalent, or false otherwise.

The frequency of a letter x is the number of times it occurs in the string.

&nbsp;
Example 1:

Input: word1 = "aaaa", word2 = "bccb"
Output: false
Explanation: There are 4 'a's in "aaaa" but 0 'a's in "bccb".
The difference is 4, which is more than the allowed 3.


Example 2:

Input: word1 = "abcdeef", word2 = "abaaacc"
Output: true
Explanation: The differences between the frequencies of each letter in word1 and word2 are at most 3:
- 'a' appears 1 time in word1 and 4 times in word2. The difference is 3.
- 'b' appears 1 time in word1 and 1 time in word2. The difference is 0.
- 'c' appears 1 time in word1 and 2 times in word2. The difference is 1.
- 'd' appears 1 time in word1 and 0 times in word2. The difference is 1.
- 'e' appears 2 times in word1 and 0 times in word2. The difference is 2.
- 'f' appears 1 time in word1 and 0 times in word2. The difference is 1.


Example 3:

Input: word1 = "cccddabba", word2 = "babababab"
Output: true
Explanation: The differences between the frequencies of each letter in word1 and word2 are at most 3:
- 'a' appears 2 times in word1 and 4 times in word2. The difference is 2.
- 'b' appears 2 times in word1 and 5 times in word2. The difference is 3.
- 'c' appears 3 times in word1 and 0 times in word2. The difference is 3.
- 'd' appears 2 times in word1 and 0 times in word2. The difference is 2.


&nbsp;
Constraints:


	n == word1.length == word2.length
	1 &lt;= n &lt;= 100
	word1 and word2 consist only of lowercase English letters.


class Solution:
    def checkAlmostEquivalent(self, w1: str, w2: str) -> bool:
		return all(v < 4 for v in ((Counter(w1) - Counter(w2)) + (Counter(w2) - Counter(w1))).values())
class Solution { 
    public boolean checkAlmostEquivalent(String word1, String word2) {
        Map<Character,Integer> map = new HashMap();
        for (int i = 0; i < word1.length(); i++) {
            map.put(word1.charAt(i), map.getOrDefault(word1.charAt(i), 0) + 1);
            map.put(word2.charAt(i), map.getOrDefault(word2.charAt(i), 0) - 1);
        }
        for (int i : map.values()) { //get value set
            if (i > 3 || i < -3) { 
                return false;
            }
        }
        return true;
    }
}
class Solution {
public:
	bool checkAlmostEquivalent(string word1, string word2) {
		unordered_map<char, int> m;
		for(int i = 0; i < word1.size(); i++){
			m[word1[i]]++;
		}
		for(int i = 0; i < word2.size(); i++){
			m[word2[i]]--;
		}
		for(auto i : m){
			if(abs(i.second) > 3){
				return false;
			}
		}
		return true;
	}
};
var checkAlmostEquivalent = function(word1, word2) {
    const hm = new Map()
    const addToHm = (ch, add) => {
        if (hm.has(ch)) 
            hm.set(ch, hm.get(ch) + (add ? +1 : -1))
        else 
            hm.set(ch, (add ? +1 : -1))  
    }
    
    for (let i = 0; i < word1.length; i++) {
        addToHm(word1[i], true) 
        addToHm(word2[i], false) 
    }
    
    for (const val of hm.values())
        if (Math.abs(val) > 3)
			return false
    
    return true
};
Check Whether Two Strings are Almost Equivalent