0
点赞
收藏
分享

微信扫一扫

LeetCode: 893. Groups of Special-Equivalent Strings

萧萧雨潇潇 2022-12-05 阅读 64


LeetCode: 893. Groups of Special-Equivalent Strings

题目描述

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 1:

Input: ["a","b","c","a","c","c"]
Output: 3
Explanation: 3 groups ["a","a"], ["b"], ["c","c","c"]

Example 2:

Input: ["aa","bb","ab","ba"]
Output: 4
Explanation: 4 groups ["aa"], ["bb"], ["ab"], ["ba"]

Example 3:

Input: ["abc","acb","bac","bca","cab","cba"]
Output: 3
Explanation: 3 groups ["abc","cba"], ["acb","bca"], ["bac","cab"]

Example 4:

Input: ["abcd","cdab","adcb","cbad"]
Output: 1
Explanation: 1 group ["abcd","cdab","adcb","cbad"]

Note:

1 <= A.length <= 1000
1 <= A[i].length <= 20
All A[i] have the same length.
All A[i] consist of only lowercase letters.

解题思路

统计奇数位和偶数位的个字符出现的次数,如果 ​​S0​​​ 串和 ​​S1​​ 串统计的结果相同,则它们是 special-equivalent 的。

AC 代码

class Solution {
map<char, int> countChar(string str)
{
map<char, int> charCounter;

// 统计偶数位字符
for(size_t i = 0; i < str.size(); i += 2)
{
++charCounter[str[i]];
}

// 统计奇数位字符
for(size_t i = 1; i < str.size(); i += 2)
{
++charCounter[-str[i]];
}

return charCounter;
}
public:
int numSpecialEquivGroups(vector<string>& A) {
set<map<char, int>> ans;
for(string S : A)
{
ans.insert(countChar(S));
}

return ans.size();
}
};


举报

相关推荐

0 条评论