Welcome to Subscribe On Youtube
1897. Redistribute Characters to Make All Strings Equal
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' inwords[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 returntrue
.
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 <= 100
1 <= words[i].length <= 100
words[i]
consists of lowercase English letters.
Solutions
-
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; } }
-
class Solution { public: bool makeEqual(vector<string>& words) { vector<int> counter(26, 0); for (string word : words) { for (char c : word) { ++counter[c - 'a']; } } int n = words.size(); for (int count : counter) { if (count % n != 0) 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())
-
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; }
-
impl Solution { pub fn make_equal(words: Vec<String>) -> bool { let mut cnt = std::collections::HashMap::new(); for word in words.iter() { for c in word.chars() { *cnt.entry(c).or_insert(0) += 1; } } let n = words.len(); cnt.values().all(|&v| v % n == 0) } }