leetcode 算法题893 (简单234) 特殊等价字符串组
- 题目介绍
你将得到一个字符串数组 A。
如果经过任意次数的移动,
S == T,那么两个字符串 S 和 T 是特殊等价的。
一次移动包括选择两个索引 i 和 j,
且 i % 2 == j % 2,
交换 S[j] 和 S [i]。
现在规定,A 中的特殊等价字符串组是 A 的非空子集 S,
这样不在 S 中的任何字符串与 S 中的任何字符串都不是特殊等价的。
返回 A 中特殊等价字符串组的数量。
- 示例
输入:[“a”,“b”,“c”,“a”,“c”,“c”]
输出:3
解释:3 组 [“a”,“a”],[“b”],[“c”,“c”,“c”]
输入:[“aa”,“bb”,“ab”,“ba”]
输出:4
解释:4 组 [“aa”],[“bb”],[“ab”],[“ba”]
输入:[“abc”,“acb”,“bac”,“bca”,“cab”,“cba”]
输出:3
解释:3 组 [“abc”,“cba”],[“acb”,“bca”],[“bac”,“cab”]
输入:[“abcd”,“cdab”,“adcb”,“cbad”]
输出:1
解释:1 组 [“abcd”,“cdab”,“adcb”,“cbad”]
- 提示
1 <= A.length <= 1000
1 <= A[i].length <= 20
所有 A[i] 都具有相同的长度。
所有 A[i] 都只由小写字母组成。
- 解法一
/**
* @param {string[]} A
* @return {number}
*/
var numSpecialEquivGroups = function(A) {
let i = 0, set = new Set();
while(i < A.length) {
let word = A[i++];
if(word.length === 1) {
set.add(word);
} else {
console.log(word)
let t0 = [], t1 = [];
let j = 0;
while(j < word.length) {
if(j % 2 === 0) {
t0.push(word[j]);
} else {
t1.push(word[j]);
}
j++;
}
t0.sort();
t1.sort();
let key = t0.join('') + t1.join('')
set.add(key);
}
}
return set.size;
};
执行用时 : 148 ms, 在所有 JavaScript 提交中击败了15.15%的用户
内存消耗 : 42.7 MB, 在所有 JavaScript 提交中击败了6.67%的用户