Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2068.html
2068. Check Whether Two Strings are Almost Equivalent (Easy)
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.
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.
Constraints:
n == word1.length == word2.length
1 <= n <= 100
word1
andword2
consist only of lowercase English letters.
Solution 1.
-
// OJ: https://leetcode.com/problems/check-whether-two-strings-are-almost-equivalent/ // Time: O(N) // Space: O(1) class Solution { public: bool checkAlmostEquivalent(string s, string t) { int cnt[26] = {}; for (char c : s) cnt[c - 'a']++; for (char c : t) cnt[c - 'a']--; for (int i = 0; i < 26; ++i) { if (abs(cnt[i]) > 3) return false; } return true; } };
-
class Solution: def checkAlmostEquivalent(self, word1: str, word2: str) -> bool: counter = defaultdict(int) for c in word1: counter[c] += 1 for c in word2: counter[c] -= 1 return all(abs(x) <= 3 for x in counter.values()) ############ # 2068. Check Whether Two Strings are Almost Equivalent # https://leetcode.com/problems/check-whether-two-strings-are-almost-equivalent/ class Solution: def checkAlmostEquivalent(self, word1: str, word2: str) -> bool: counter1 = Counter(word1) counter2 = Counter(word2) for k1, v1 in counter1.items(): if abs(counter2[k1] - v1) > 3: return False for k2, v2 in counter2.items(): if abs(counter1[k2] - v2) > 3: return False return True
-
class Solution { public boolean checkAlmostEquivalent(String word1, String word2) { int[] counter = new int[26]; for (char c : word1.toCharArray()) { ++counter[c - 'a']; } for (char c : word2.toCharArray()) { --counter[c - 'a']; } for (int i = 0; i < 26; ++i) { if (Math.abs(counter[i]) > 3) { return false; } } return true; } }
-
func checkAlmostEquivalent(word1 string, word2 string) bool { counter := make([]int, 26) for i := range word1 { counter[word1[i]-'a']++ } for i := range word2 { counter[word2[i]-'a']-- } for _, v := range counter { if v > 3 || -v > 3 { return false } } return true }
-
function checkAlmostEquivalent(word1: string, word2: string): boolean { const cnt: number[] = new Array(26).fill(0); for (const c of word1) { ++cnt[c.charCodeAt(0) - 97]; } for (const c of word2) { --cnt[c.charCodeAt(0) - 97]; } return cnt.every(x => Math.abs(x) <= 3); }
-
class Solution { /** * @param String $word1 * @param String $word2 * @return Boolean */ function checkAlmostEquivalent($word1, $word2) { for ($i = 0; $i < strlen($word1); $i++) { $hashtable[$word1[$i]] += 1; $hashtable[$word2[$i]] -= 1; } $keys = array_keys($hashtable); for ($j = 0; $j < count($keys); $j++) { if (abs($hashtable[$keys[$j]]) > 3) return false; } return true; } }
-
public class Solution { public bool CheckAlmostEquivalent(string word1, string word2) { int[] cnt = new int[26]; foreach (var c in word1) { cnt[c - 'a']++; } foreach (var c in word2) { cnt[c - 'a']--; } return cnt.All(x => Math.Abs(x) <= 3); } }
-
/** * @param {string} word1 * @param {string} word2 * @return {boolean} */ var checkAlmostEquivalent = function (word1, word2) { const m = new Map(); for (let i = 0; i < word1.length; i++) { m.set(word1[i], (m.get(word1[i]) || 0) + 1); m.set(word2[i], (m.get(word2[i]) || 0) - 1); } for (const v of m.values()) { if (Math.abs(v) > 3) { return false; } } return true; };
Discuss
https://leetcode.com/problems/check-whether-two-strings-are-almost-equivalent/discuss/1575960/C%2B%2B-Straightforward