题目
输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。在判断是否满足条件时,字母不区分大小写,但在输出的时候保留输入时的大小写,按字典序进行排列。
样例输入
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
解析与代码
本题考查单词重组,重组问题应采用机器思维,即不考虑大小写、将单词的字母排序,若新生成的字符串唯一,则说明该单词不能重组,若不唯一,则说明可以重组。因此使用map来关联每个单词重后后的新字符串与其唯一性,代码如下:
//
// Created by Dr.W on 2019.4.28.
//
#include <bits/stdc++.h>
using namespace std;
map<string,int> m; //每个单词的映射,对应映射是个数
vector<string> w; //单词向量
string nstr(const string &s){
string ns = s;
for(int i = 0; i < s.length(); i ++)
ns[i] = tolower(ns[i]);
sort(ns.begin(),ns.end());
return ns;
}
int main(){
string str;
// cout << nstr(str);