问题描述
输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文 本中的另外一个单词。在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中 的大小写,按字典序进行排列(所有大写字母在所有小写字母的前面)。
样例输入
ladder came tape soon leader acme RIDE lone Dreis peat
ScAlE orb eye Rides dealer NotE derail LaCeS drIed
noel dire Disk mace Rob dries
#
样例输出
Disk
NotE
derail
drIed
eye
ladder
soon
解题思路:对单词进行“标准化”,然后进行判断即可。具体看程序
AC的C++程序:
#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<set>
#include<ctype.h>
#include<algorithm>
using namespace std;
vector<string>words;
map<string,int>dict;
set<string>ans;
//将单词s进行标准化
string repr(string s)
{
for(int i=0;i<s.length();i++)
s[i]=tolower(s[i]);
sort(s.begin(),s.end());
return s;
}
int main()
{
string s;
while(cin>>s)
{
if(s[0]=='#')
break;
words.push_back(s);
string r=repr(s);
dict[r]++;
}
for(int i=0;i<words.size();i++)
if(dict[repr(words[i])]==1)
ans.insert(words[i]);
for(set<string>::iterator it=ans.begin();it!=ans.end();it++)
cout<<*it<<endl;
return 0;
}