1 条题解
-
0
题解
哈希表 + 位运算
字符串仅由小写字母组成,因此一个字符串含有的字符集合,可以用一个26位的二进制数字表示状态。从低位到高位,如果这一位为1,则表示含有对应的小写字母。遍历
words
,并用一个哈希表cnt
记录每个状态出现的次数,对于每个word
,计算其对应的状态state
,并将结果增加cnt[state]
,表示当前字符串与之前遍历过的所有同状态的字符串都相似,然后将cnt[state]
自增1。#include <bits/stdc++.h> using namespace std; int n, res = 0; string word; unordered_map<int, int> cnt; int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> word; int state = 0; for (char c : word) { state |= 1 << (c - 'a'); } res += cnt[state]; cnt[state]++; } cout << res << endl; };
- 1
信息
- ID
- 335
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- (无)
- 递交数
- 39
- 已通过
- 33
- 上传者