前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >华为机试HJ27-查找兄弟单词-C++实现

华为机试HJ27-查找兄弟单词-C++实现

作者头像
ccf19881030
发布于 2023-02-26 08:30:07
发布于 2023-02-26 08:30:07
49800
代码可运行
举报
文章被收录于专栏:ccf19881030的博客ccf19881030的博客
运行总次数:0
代码可运行

HJ27 查找兄弟单词

题目描述:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
描述
    定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),
    而不添加、删除、修改原有的字母就能生成的单词。
    兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
    现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?
    注意:字典中可能有重复单词。

    数据范围:1≤n≤1000 ,输入的字符串长度满足 1≤len(str)101≤k<n
    输入描述:
    输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k
    输出描述:
    第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。
    示例1
    输入:
    3 abc bca cab abc 1
    输出:
    2
    bca

    示例2
    输入:
    6 cab ad abcd cba abc bca abc 1
    输出:
    3
    bca
    说明:
    abc的兄弟单词有cab cba bca,所以输出3
    经字典序排列后,变为bca cab cba,所以第1个字典序兄弟单词为bca

解题思路:

这是一道字符串的题目。 编写一个用于判断两个单词字符串s1, s2,如果s1和s2的长度不相同,或者s1和s2相等,则表示s1、s2不是兄弟;接着分别将s1和s2按照字典序进行排序,如果两者相等则是兄弟单词,否则不是。 具体的C++实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool isBotherWord(const string &source, const string &dest)
{
   // 注意:排除source == dest的情况
   if (source.length() != dest.length() || source == dest) {
       return false;
   }
   string s1 = source;
   std::sort(s1.begin(), s1.end());
   string s2 = dest;
   std::sort(s2.begin(), s2.end());
   return s1 == s2;
}

int main() {
   int n, k;
   vector<string> sVec;
   string x;
   while (cin >> n) { // 注意 while 处理多个 case
       // 输入n个单词作为字典单词
       string sTemp;
       for (int i = 0; i < n; i++) {
           cin >> sTemp;
           sVec.push_back(sTemp);
       }
       cin >> x;
       cin >> k;
       vector<string> botherWords;
       for (auto word : sVec) {
           if (isBotherWord(x, word)) {
               botherWords.push_back(word);
           }
       }
       // 对botherWords按照字典顺序进行排序
       std::sort(botherWords.begin(), botherWords.end());
       cout << botherWords.size() << endl;
       if ((int)(botherWords.size()) > 0 && k <= (int)(botherWords.size()) - 1) {
           cout << botherWords[k-1] << endl;
       }
       sVec.clear();
   }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
剑指offer No.27 字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
week
2020/04/21
3390
一道简单题看 y 总 C++ 代码风格优于我自己的地方
的字母集的子集。一个字符串的字母集是指该字符串包含的所有不同字母的集合,例如 abadaba 的字母集为
Piper蛋窝
2021/08/20
5070
LeetCode 第 24 场双周赛(326/1898,前17.2%)
做出来了 1、2、3 题,32分钟做出来3题,感觉有点蒙过来。第4题实在没思路,继续加油!
Michael阿明
2020/07/13
3470
Sword To Offer 027 - 字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
Reck Zhang
2021/08/11
1920
全排列 next_permutation的使用
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。
喜欢ctrl的cxk
2019/11/07
5810
C++版 - 剑指offer面试题28: 字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
Enjoy233
2019/03/05
6470
剑指OFFER之字符串的排列(九度OJ1369)
题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入: 每个测试案例包括1行。 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 输出: 对应每组数据,按字典序输出所有排列。 样例输入: abc BCA 样例输出: abc acb bac bca cab cba ABC ACB BAC BCA CAB CBA 解题思路:   这道题要注意两个问题:
用户1154259
2018/01/18
5890
2021蓝桥杯模拟赛:删除字符串 && 谈判(贪心算法)
【题目描述】给定一个单词,请问在单词中删除t个字母后,能得到的字典序最小的单词是什么?
Cyril-KI
2022/09/19
4300
C++ STL (标准模板库) 详细内容讲解
顺序容器有以下三种:可变长动态数组 vector、双端队列 deque、双向链表 list。
杨鹏伟
2020/09/11
2.2K0
字符串的排列
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
3680
剑指offer——字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
AI那点小事
2020/04/20
3520
最小字符串 蓝桥杯 C++
  第一行T,表示有T组数据。   接下来T组数据   每组第一行一个正整数n,表示字符串个数。   接下来n行,每行一个字符串(长度不超过100)。
叶茂林
2023/07/30
2510
Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent
You are given a string ss consisting of lowercase Latin letters. Let the length of ss be |s||s|. You may perform several operations on this string.
glm233
2020/09/28
5170
3429. 全排列
我们假设对于小写字母有 a<b<…<y<z,而且给定的字符串中的字母已经按照从小到大的顺序排列。
浪漫主义狗
2022/07/11
1670
华为机试001:字符串最后一个单词的长度(华为OJ001)
华为机试 字符串最后一个单词的长度 计算字符串最后一个单词的长度,单词以空格隔开。 提交网址: http://www.nowcoder.com/practice/8c949ea5f36f422594
Enjoy233
2019/03/05
9040
LeetCode 893. 特殊等价字符串组
一次移动包括选择两个索引 i 和 j,且 i % 2 == j % 2,交换 S[j] 和 S [i]。
Michael阿明
2020/07/13
4980
陌陌2019秋招研发编程题题解
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
武培轩
2018/10/11
5480
1750:全排列
1750:全排列 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。 输入输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。输出输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义: 已知S = s1s2.
attack
2018/04/11
1.2K0
10min快速回顾C++语法(五)字符串专题
⭐写在前面的话:本系列文章旨在短时间内回顾C/C++语法中的重点与易错点,巩固算法竞赛与写题过程中常用的语法知识,精准地解决学过但有遗忘的情况,为算法刷题打下坚实的基础。
timerring
2022/09/23
9860
华为机试题 HJ36 字符串加密
华为机试题 HJ36 字符串加密 题目描述: 描述 有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理: 首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个, 将所得结果作为新字母表开头,并将新建立的字母表中未出现的字母按照正常字母表顺序加入新字母表。如下所示: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z T R A I L B Z E
ccf19881030
2023/02/26
6700
相关推荐
剑指offer No.27 字符串的排列
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验