字符串分类--全国模拟(二)

[编程题] 字符串分类
时间限制:1秒
空间限制:32768K
牛牛有N个字符串,他想将这些字符串分类,他认为两个字符串A和B属于同一类需要满足以下条件:
A中交换任意位置的两个字符,最终可以得到B,交换的次数不限。比如:abc与bca就是同一类字符串。
现在牛牛想知道这N个字符串可以分成几类。 
输入描述:
首先输入一个正整数N(1 <= N <= 50),接下来输入N个字符串,每个字符串长度不超过50。
 
 
输出描述:
输出一个整数表示分类的个数。
 
输入例子:
4 abcd abdc dabc bacd
 
输出例子:
1
 
解题思路:使用vector存储每个字符串,针对每个字符串进行排序操作(排序操作保证的是一类字符串一样),然后将排好序的字符串插入到set中,可以保证只属于一类的字符串只插入一次,set的大小就是字符串的类数。
 1 #include <iostream>
 2 #include <string.h>
 3 #include <vector>
 4 #include <set>
 5 #include <algorithm>
 6 using namespace std;
 7 int main()
 8 {
 9     int n;
10     while(cin>>n)
11     {
12         vector<string> vv(n);//必须是确定的n才可以对vv采用cin>>vv[i]的方式输入
13         set<string> s1;
14         for(int i=0;i<n;i++)
15         {
16             cin>>vv[i];
17         }
18         for(int i=0;i<n;i++)
19         {
20             sort(vv[i].begin(),vv[i].end());
21         }
22         for(int i=0;i<n;i++)
23         {
24             s1.insert(vv[i]);
25         }
26         cout<<s1.size()<<endl;
27     }
28     return 0;
29 }
原文地址:https://www.cnblogs.com/qqky/p/7001740.html