Problem: 2306. 公司命名
👨🏫 灵神题解
class Solution {public long distinctNames(String[] ideas) {// 创建一个大小为26的HashSet数组,用于存储每个首字母对应的字符串集合Set<String>[] groups = new HashSet[26];Arrays.setAll(groups, i -> new HashSet<>());long ans = 0; // 初始化答案计数器// 遍历字符串数组,将每个字符串按首字母分类存储到对应的HashSet中for (String s : ideas) {groups[s.charAt(0) - 'a'].add(s.substring(1));}// 遍历所有可能的首字母组合(a和b),a > bfor (int a = 1; a < 26; a++) {for (int b = 0; b < a; b++) {int m = 0; // 初始化交集计数器// 计算两个首字母集合的交集大小for (String s : groups[a]) {if (groups[b].contains(s))m++;}// 计算可以交换首字母的字符串对数量// (a集合中非交集部分的大小) * (b集合中非交集部分的大小)ans += (long) (groups[a].size() - m) * (groups[b].size() - m);}}// 由于每对字符串可以以两种方式交换(ab和ba),所以最终答案乘以2return ans * 2;}
}