Question
893. Groups of Special-Equivalent Strings
Solution
题目大意:
AB两个字符串相等的条件是:A中偶数位出现的字符与B中偶数位出现的字符相同且奇数位出现的字符也相同
按上述判定相等字符串的规则求去重后字符串的个数
思路:
strHash函数,传一个字符串,返回该字符串的奇数位字符和偶数位字符出现的在字母表中的分布
构造一个set来存储每个字符串的strHash后的结果
Java实现:
public int numSpecialEquivGroups(String[] A) {
Set<String> strSet = new HashSet<>();
for (String tmp : A) {
strSet.add(strHash(tmp));
}
return strSet.size();
}
private String strHash(String tmp) {
if (tmp.length() == 1) return tmp;
int[] cArr = new int[52];
int odd = 0;
for (char c : tmp.toCharArray()) {
cArr[(odd++ % 2 == 0 ? 26 : 0) + c - 'a']++;
}
StringBuilder sb = new StringBuilder();
for (int i : cArr) {
sb.append(i);
}
return sb.toString();
}