输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。 在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中的大小写,按字典序进行排列(所有大写字母在所有小写字母的前面)。
Sample Input
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
#
Sample Output
Disk
NotE
derail
drIed
eye
ladder
soon
#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
//转换小写 并 排序
string re( string& s){
string s1 = s;
for(int i = 0; i < s1.length(); i ++)
s1[i] = tolower(s[i]);
sort( s1.begin(), s1.end());
return s1;
}
int main(){
string s, s1;
vector <string> a1, a2;
map <string, int> m;
while(cin >> s && s != "#"){
//原始数据
a1.push_back( s);
s1 = re( s);
//统计 s1 出现的次数
if( !m.count( s1)) m[s1] = 0;
m[s1] ++;
}
for(int i = 0; i < a1.size(); i ++){
//对 原始数据 进行判断
if( m[ re( a1[i])] == 1) a2.push_back( a1[i]); //满足条件的新数组
}
//排序
sort( a2.begin(), a2.end());
//输出
for(int i = 0; i < a2.size(); i ++)
cout << a2[i] << endl;
}