Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/1897.html
1897. Redistribute Characters to Make All Strings Equal
Level
Easy
Description
You are given an array of strings words (0-indexed).
In one operation, pick two distinct indices i and j, where words[i] is a non-empty string, and move any character from words[i] to any position in words[j].
Return true if you can make every string in words equal using any number of operations, and false otherwise.
Example 1:
Input: words = [“abc”,”aabc”,”bc”]
Output: true
Explanation: Move the first ‘a’ in words[1] to the front of words[2], to make words[1] = “abc” and words[2] = “abc”. All the strings are now equal to “abc”, so return true.
Example 2:
Input: words = [“ab”,”a”]
Output: false
Explanation: It is impossible to make all the strings equal using the operation.
Constraints:
1 <= words.length <= 1001 <= words[i].length <= 100words[i]consists of lowercase English letters.
Solution
Loop over words and count the number of occurrences of each word. Return true if and only if for all letters, the number of occurrences is divisible by the length of array words.
-
class Solution { public boolean makeEqual(String[] words) { int[] counts = new int[26]; for (String word : words) { int wordLength = word.length(); for (int i = 0; i < wordLength; i++) { char c = word.charAt(i); counts[c - 'a']++; } } int length = words.length; for (int i = 0; i < 26; i++) { if (counts[i] % length != 0) return false; } return true; } } ############ class Solution { public boolean makeEqual(String[] words) { int[] counter = new int[26]; for (String word : words) { for (char c : word.toCharArray()) { ++counter[c - 'a']; } } int n = words.length; for (int i = 0; i < 26; ++i) { if (counter[i] % n != 0) { return false; } } return true; } } -
// OJ: https://leetcode.com/problems/redistribute-characters-to-make-all-strings-equal/ // Time: O(N) // Space: O(1) class Solution { public: bool makeEqual(vector<string>& A) { int cnt[26] = {}; for (auto &s : A) { for (char c : s) cnt[c - 'a']++; } for (int i = 0; i < 26; ++i) { if (cnt[i] % A.size()) return false; } return true; } }; -
class Solution: def makeEqual(self, words: List[str]) -> bool: counter = Counter() for word in words: for c in word: counter[c] += 1 n = len(words) return all(count % n == 0 for count in counter.values()) ############ # 1897. Redistribute Characters to Make All Strings Equal # https://leetcode.com/problems/redistribute-characters-to-make-all-strings-equal/ class Solution: def makeEqual(self, words: List[str]) -> bool: n = len(words) mp = collections.defaultdict(int) for word in words: for c in word: mp[c] += 1 for key in mp: if not (mp[key] >= n and mp[key] % n == 0): return False return True -
func makeEqual(words []string) bool { counter := [26]int{} for _, word := range words { for _, c := range word { counter[c-'a']++ } } n := len(words) for _, count := range counter { if count%n != 0 { return false } } return true } -
function makeEqual(words: string[]): boolean { let n = words.length; let letters = new Array(26).fill(0); for (let word of words) { for (let i = 0; i < word.length; ++i) { ++letters[word.charCodeAt(i) - 97]; } } for (let i = 0; i < letters.length; ++i) { if (letters[i] % n != 0) { return false; } } return true; }