[C++] LUOGU P1808 - 单词分类

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部分函数小合集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值