题意:输出一些单词,这个单词不能被其他单词重排得到。在判断是不是可以重排得到的时候,不区分大小写。输出按字典序从小到大输出。
思路:把所有单词变成小写,sort 一遍,存到map。然后我再for一次,如果某个string 在 标准化之后的key ==1 那么满足条件,输出。
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <vector>
#include <cmath>
#include <queue>
#include <string>
#include <sstream>
#include <map>
#include <set>
using namespace std;
typedef long long ll;
const int INF=2147483647;
const int MAXN=1e5+10;
const ll mod=1e9+7;
using namespace std;
typedef long long ll;
vector <string> words;
map <string,int> cnt;
string repr(const string&s)
{
string ans=s;
for(int i=0;i<ans.length();i++)
ans[i]=tolower(ans[i]);
sort(ans.begin(),ans.end());
return ans;
}
int main(void)
{
string s;
while(cin >>s)
{
if(s[0]=='#') break;
words.push_back(s);
string ans=repr(s);
if(cnt.count(ans)==0)
cnt[ans]=0;
cnt[ans]++;
}
sort(words.begin(),words.end());
//map的遍历和数组一模一样,和vector一样。set遍历用地址
for(int i=0;i<words.size();i++)
{
if(cnt[repr(words[i])]==1)
cout << words[i] <<endl;
}
return 0;
}