1897. 重新分配字符使所有字符串都相等
大约 2 分钟
1897. 重新分配字符使所有字符串都相等
- 标签:哈希表、字符串、计数
- 难度:简单
题目链接
题目大意
描述:给定一个字符串数组 (下标从 开始计数)。
在一步操作中,需先选出两个 不同 下标 和 ,其中 是一个非空字符串,接着将 中的任一字符移动到 中的 任一 位置上。
要求:如果执行任意步操作可以使 中的每个字符串都相等,返回 ;否则,返回 。
说明:
- 。
- 由小写英文字母组成。
示例:
- 示例 1:
输入:words = ["abc","aabc","bc"]
输出:true
解释:将 words[1] 中的第一个 'a' 移动到 words[2] 的最前面。
使 words[1] = "abc" 且 words[2] = "abc"。
所有字符串都等于 "abc" ,所以返回 True。
- 示例 2:
输入:words = ["ab","a"]
输出:False
解释:执行操作无法使所有字符串都相等。
解题思路
思路 1:哈希表
如果通过重新分配字符能够使所有字符串都相等,则所有字符串的字符需要满足:
- 每个字符串中字符种类相同,
- 每个字符串中各种字符的个数相同。
则我们可以使用哈希表来统计字符串中字符种类及个数。具体步骤如下:
- 遍历单词数组 中的所有单词 。
- 遍历所有单词 中的所有字符 。
- 使用哈希表 统计字符种类及个数。
- 如果所有字符个数都是单词个数的倍数,则说明通过重新分配字符能够使所有字符串都相等,则返回 。
- 否则返回 。
思路 1:代码
class Solution:
def makeEqual(self, words: List[str]) -> bool:
size = len(words)
cnts = Counter()
for word in words:
for ch in word:
cnts[ch] += 1
return all(value % size == 0 for key, value in cnts.items())
思路 1:复杂度分析
- 时间复杂度:,其中 为数组 中所有单词的长度之和, 是字符集,本题中 。
- 空间复杂度:。