题目大意
给你n个字符串,如果两个字符串中拥有相同的字符,则他们属于同一集合,问你有多少个集合。
题目思路
本题可以使用并查集来进行解答,我们可以将一个字符串中所有的字符与第一个字符合并,再在最后进行一遍检查。
本题代码
#include<bits/stdc++.h>
using namespace std;
int fa[27], flag[27];
int find(int x) {
if (x == fa[x]) return x;
return fa[x] = find(fa[x]);
}
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= 26; i++) fa[i] = i;
for (int i = 1; i <= n; i++) {
string st;
cin >> st;
int l = st.length();
int t = st[0] - 'a' + 1;
flag[t] = true;
int a = find(t), q, p;
for (int j = 1; j < l; j++) {
int tt = st[j] - 'a' + 1;
flag[tt] = true;
q = find(tt);
p = a;
if (p > q) swap(p, q);
if (p != q) fa[q] = p;
}
}
int ans = 0;
for (int i = 1; i <= 26; i++)
if (flag[i] && fa[i] == i)
ans++;
printf("%d", ans);
return 0;
}