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 <= 100
1 <= words[i].length <= 100
words[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;
}
}