[编程题] 字符串分类
时间限制: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 }