1.题干
单词分类
时间限制:1s
内存限制:128M
[题目描述]
Oliver 为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类。
两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。
例如 AABAC,它和 CBAAA就可以归为一类,而和 AAABB就不是一类。
现在Oliver有N个单词,所有单词均由大写字母组成,每个单词的长度不超过100。你要告诉 Oliver 这些单词会被分成几类。
[输入格式]
输入文件的第一行为单词个数 N,以下 N行每行为一个单词。
[输出格式]
输出文件仅包含一个数,表示这 N个单词分成的类数。
[输入输出样例#1]
输入#1
3 AABAC CBAAA AAABB
输出#1
2
【说明提示】
- 对于 70%的数据满足 1≤N≤1001≤N≤100;
- 对于 100%的数据满足 1≤N≤100001≤N≤10000。
2.AC代码
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string a[10010];
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; i++){
string s;
cin >> s;
sort(s.begin(), s.end());
a[i] = s;
}
sort(a + 1, a + n + 1);
string last = "0";
int cnt = 0;
for(int i = 1; i <= n; i++){
// 去重并计数
if(a[i] != last){
cnt++;
last = a[i];
}
}
cout << cnt;
return 0;
}
重难点参考: [C++] STL - string部分函数小合集