【每日打卡】Day14:反片语(UVa156) C++实现

这篇博客介绍了如何解决UVa156问题,即找出输入文本中不能通过字母重排得到其他单词的那些单词。文章提供了解题思路,通过忽略大小写并排序单词来判断其唯一性,并给出了C++代码实现,利用map存储排序后的单词及其唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另外一个单词。在判断是否满足条件时,字母不区分大小写,但在输出的时候保留输入时的大小写,按字典序进行排列。

样例输入

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);
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值