题目:给定两个不超过100的字符串,判断是否可以做到将其中一个字符串通过重排和映射的操作,使得两个字符串相同。例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT,然后每个字母只要通过一次映射,映射到前一个字母,可以得到VICTORIOUS(映射可以多次多样)。输入两个字符串,输出YES或者NO。

思路:这里要用比较抽象的思想,由于字符串可以进行任意的重排映射,因此只要两个字符串各个字母的数量在经过排序后发现相等,那么可以通过任意的操作使得两个字符串变成一样。可以理解为字母可以任意变化,但相同的字母只能变化成一样的字母,如AABBC可以得到GZZXX,他们的各字母数量经过排序都是122。

因此我们只要统计出两个字符串各字母的数量,然后对他们排序后比较是否相同即可,相同即YES,不相同即NO。

内容有参考《算法竞赛入门经典》的分析,代码已通过vj测试!

#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
char s1[105], s2[105];                              //输入两串字符串
int let1[26], let2[26];                             //记录s1,s2中各字母出现的个数int cmp_int(const void* let1, const void* let2)
{return *(int*)let1 - *(int*)let2;
}int main()
{while (cin >> s1){memset(let1, 0, sizeof(let1));              //每次循环对字母计数的数组清零memset(let2, 0, sizeof(let1));cin >> s2;for (int j = 0; j < strlen(s1); j++)        //计算s1中各字母出现次数{let1[s1[j]-65]++;}for (int k = 0; k < strlen(s2); k++)        //计算s2中各字母出现次数{let2[s2[k]-65]++;}//现在得到了各字母在两个字符串中的数量的数组,比如一个是3241,一个是1243//那么如果经过排序发现两个数组相等,说明字母的数量可以做到一一对应,如都是1234(都是一共出现四种字母,数量分别为1、2、3、4),映射重排之后自然可以得到相同的字符串。//因此接下来只要对let数组排序即可。qsort(let1, 26, sizeof(let1[0]), cmp_int);qsort(let2, 26, sizeof(let2[0]), cmp_int);int flag = 1;for(int i=0;i<26;i++)if (let1[i] != let2[i]){flag = 0;break;}if (flag == 0)cout << "NO" << endl;elsecout << "YES" << endl;}return 0;
}

接下来简单介绍一下所用的排序函数:

头文件#include<stdlib.h>,所用函数qsort快速排序,其声明如下:

void qsort(void*base ,size_t num ,size_t size ,int(*comparator)(const void*,const void*));

其中的四个参数分别是待排序数组的首地址,数组元素个数,每个元素字节大小,以及最后一个参数是一个函数。

前三个很好理解,按照需求填入即可,然而最后一个参数需要我们根据我们需求自定义,然后传入这个函数作为快排函数的参数。(可以参考代码第八行的函数)

这个函数是一个自定义函数,有自己的模板,要求我们编写来告诉qsort函数要根据什么进行排序。具体知识请参考相关的博客,不作多解释。

古老的密码(Ancient Cipher,UVa1339)(算法竞赛入门经典 例题4-1)C++相关推荐

  1. 算法竞赛入门经典 例题6-6 小球下落(python、C)

    同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 问题描述: 有一颗二叉树,最大深度为D,且所有叶子的深度都相同.所有结点从上到下从左到右编号为 1,2,3,- , ...

  2. 算法竞赛入门经典 例题6-2 铁轨(C、python)

    同个人网站 https://www.serendipper-x.cn/,欢迎访问 ! 问题描述: 某城市有一个火车站,铁轨铺设如图所示.有n节车厢从A方向驶入车站,按进站顺序编号为 1~n .你的任务 ...

  3. 算法竞赛入门经典 例题6-21

    UVa506 System Dependencies 编写程序实现类似Linux下的软件包管理器,其工作方式为: 可以通过命令显式安装组件,这个过程也可能隐式安装依赖组件 如果没有其它组件仍然依赖一个 ...

  4. 算法竞赛入门经典 例题6-16

    刷题荒废了一个多月,今日了却一件事情,把此题补上! UVa10129 Play on Words 有若干个圆盘,每个圆盘上都有一个单词,判断这些圆盘是否能排成一排,使得相邻圆盘的首尾字母相同. 3年前 ...

  5. C++ 刽子手游戏(Hangman Judge, UVa 489)(算法竞赛入门经典例题4-2)

    题目:刽子手游戏是一个简单的猜单词游戏,每次可以猜一个字母,如果单词内有这个字母,此单词内所有该字母都会显示,如果没有该字母,则记一笔错误,若满7笔错误,则输掉()猜已经猜出的单词也算错误).本题编写 ...

  6. Java实现算法竞赛入门经典例题-蚂蚁

    问题描述 一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒. 当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计). 给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂 ...

  7. UVA-814 邮件传输代理的交互 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 #include<iostream> #include< ...

  8. UVA-12171 雕塑 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在<算法竞赛入门经典第二版>书中标注了星号,也是第一道出现星号的 ...

  9. UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 有意思的一个题目.书上说这是一个不错的优先队列练习题,但实际上它其实是一个 ...

最新文章

  1. php实时股票,php获得股票数据
  2. 策略模式(Header-First笔记)
  3. jquery.desktop.js 代码分析
  4. Spring - Java/J2EE Application Framework 应用框架 第 1 章 简介
  5. php阿里云oss文件上传
  6. 如何在MacOS上创建第一个iOS Flutter应用
  7. 迁移至Android3.0遇到一些问题
  8. 3x3九宫格java_Java实现九宫格的简单实例
  9. java 数字信封_GitHub - zhopen/eos-crypto-java: EOS 公钥加密,私钥解密。基于ECC+AES 实现的双向验证加解密。数字信封的 加解密。...
  10. 每日一题:leetcode82. 删除排序链表中的重复元素 II
  11. scala 字符串函数_Scala中的字符串chomp(或chop)函数
  12. STM8单片机读取18B20温度传感器
  13. 华为方舟编译器是黑科技?
  14. 用a卡还是n卡_谁是玩家最爱的显卡?N卡优势太大,GTX 1060秒A卡全家
  15. Linux 系统故障修复和修复技巧
  16. HM-A300小程序安卓打印异常
  17. 盛迈坤电子商务:网店有哪些营销活动
  18. 2017年6月大学英语六级真题(第一套)阅读理解(一)(每日一摸)
  19. centos 批量替换文件内容
  20. 前端如何单枪匹马实现小程序页面级版本控制

热门文章

  1. AI相亲、基因配对,约吗?
  2. 亚马逊跨境电商无货源 做个人还是专业卖家合适
  3. 对CCLE数据库可以做的分析--转载
  4. 如何写日本留学计划书
  5. 迅雷下载出错.候选文件均为24.4 MB (25,642,153 字节)
  6. 使用adb命令导出hprof文件
  7. OpenCV与Skimage的初步学习
  8. html u蓝色下滑线,htmlu标签添加下划线的案例分析
  9. 3D slicer编译漫漫之路
  10. QR分解(正交三角分解)