给你一个字符串数组 words(下标 从 0 开始 计数)。
在一步操作中,需先选出两个 不同 下标 i 和 j,其中 words[i] 是一个非空字符串,接着将 words[i] 中的 任一 字符移动到 words[j] 中的 任一 位置上。
如果执行任意步操作可以使 words 中的每个字符串都相等,返回 true ;否则,返回 false 。
示例 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 <= words.length <= 100
- 1 <= words[i].length <= 100
- words[i]由小写英文字母组成
数组模拟哈希表
/*
https://leetcode.cn/u/cshappyeveryday/
执行用时:76 ms, 在所有 Typescript 提交中击败了100.00%的用户
内存消耗:52.82 MB, 在所有 Typescript 提交中击败了100.00%的用户
2024年8月24日 
*/
function makeEqual(words: string[]): boolean {const n = words.length;const arr = new Array(26).fill(0);const OFFSET = "a".charCodeAt(0);//记录每个字符出现的次数for (const word of words) {for (const char of word) {arr[char.charCodeAt(0) - OFFSET] += 1;}}//若数组元素为n个,则要保存每个元素都一样,则必须字符出现次数能被n整除for (let i = 0; i < 26; i++) {if (arr[i] % n !== 0) return false;}return true;
}