Question:
You are given an array A
of strings.
Two strings S
and T
are special-equivalent if after any number of moves, S == T.
A move consists of choosing two indices i
and j
with i % 2 == j % 2
, and swapping S[i]
with S[j]
.
Now, a group of special-equivalent strings from A
is a non-empty subset S of A
such that any string not in S is not special-equivalent with any string in S.
Return the number of groups of special-equivalent strings from A
.
Example:
Input: ["a","b","c","a","c","c"]
Output: 3
Explanation: 3 groups ["a","a"], ["b"], ["c","c","c"]
Input: ["abcd","cdab","adcb","cbad"]
Output: 1
Explanation: 1 group ["abcd","cdab","adcb","cbad"]
Input: ["aa","bb","ab","ba"]
Output: 4
Explanation: 4 groups ["aa"], ["bb"], ["ab"], ["ba"]
Input: ["abc","acb","bac","bca","cab","cba"]
Output: 3
Explanation: 3 groups ["abc","cba"], ["acb","bca"], ["bac","cab"]
Solution:
/**
* @param {string[]} A
* @return {number}
*/
var numSpecialEquivGroups = function(A) {
return A.reduce((prev, curr) => {
let left = "";
let right = "";
for (let i=0; i<curr.length; i++) {
i % 2 === 0 ? left += curr[i] : right += curr[i];
}
left = [...left].sort().join("");
right = [...right].sort().join("");
for (let i = 0; i < prev.length; i++) {
if (prev[i][0] === left && prev[i][1] === right) {
return prev
}
}
prev.push([left,right]);
return prev;
}, []).length;
};
Runtime: 96 ms, faster than 19.32% of JavaScript online submissions for Groups of Special-Equivalent Strings.
题目啥玩意~