1897 Redistribute Characters to Make All Strings Equal - Easy
Problem:
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.
Problem Analysis:
High-level strategy:
- The solution uses a Counter to count the occurrences of each character in all words.
- It then checks if the count of each character is divisible by the total number of words. If any character count is not divisible, it returns False. Otherwise, it returns True.
Complexity:
- Time Complexity: O(C), where C is the total number of characters across all words. The solution iterates through all characters in all words once.
- Space Complexity: O(C), where C is the total number of characters across all words. The Counter keeps track of character counts.
Solutions:
class Solution:
def makeEqual(self, words: List[str]) -> bool:
counts = Counter()
for word in words:
counts.update(word)
for count in counts.values():
if count % len(words) != 0:
return False
return True