题目:
描述
定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如:ab和ba是兄弟单词。ab和ab则不是兄弟单词。
现在给定你n个单词,另外再给你一个单词str,让你寻找str的兄弟单词里,按字典序排列后的第k个单词是什么?
注意:字典中可能有重复单词。本题含有多组输入数据。
输入描述:
先输入单词的个数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
结果:

解题思路:
1,获取所有数据,分为,单词数量n,单词list:strList,比对对象word,取值第index个。
2,将list进行字典序排序,用于计算第index个输出的时候好计算。
3,将word按照字母顺序排序,存于tempWord中用于判断兄弟单词是否一样。
4,循环判断每一个单词,单词长度不对的不与比较,单词与word原词一样的不与比较。其他的按照字典序排序之后和tempWord排序,如果一样则count + 1,当count+1之后和index一样,则记录下标。
5,当有第index个数据符合的时候则输出,如果没有则直接换行。
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int comWord(const void *a, const void *b) {
return *(char *)a - *(char *)b;
}
int compList(const void *a, const void *b) {
return strcmp(*(char **)a, *(char **)b);
}
int main() {
int n;
while(scanf("%d", &n) != EOF) {
/*第一步:获取所有数据*/
char **strList = (char **)malloc(sizeof(char *) * n);
for(int i = 0; i < n; i++) {
strList[i] = (char *)malloc(sizeof(char) * 1024);
scanf("%s", strList[i]);
}
qsort(strList, n, sizeof(strList[0]), compList);
char word[1024] = {};
scanf("%s", word);
int index;
scanf("%d", &index);
/*第二步:将获取到的list用字典序排序*/
int count = 0;
int len = strlen(word);
//获取temp的比对标准,将该单词按照字母顺序排序。
char tempword[1024];
int outIndex = -1;
strcpy(tempword, word);
qsort(tempword, len, sizeof(char), comWord);
/*第三步:将获取到的数据一个个和要比对的单词比对*/
for(int i = 0; i < n; i++) {
int tempLen = strlen(strList[i]);
if(tempLen != len) continue;
if(!strcmp(word, strList[i])) continue;
char templist[1024];
strcpy(templist, strList[i]);
qsort(templist, tempLen, sizeof(char), comWord);
if(!strcmp(templist, tempword)) {
count++;
if(count == index) {
outIndex = i;
}
}
}
/*第四步:打印所有数据*/
printf("%d\n", count);
if(outIndex >= 0) {
printf("%s\n", strList[outIndex]);
} else {
printf("\n");
}
}
return 0;
}
这是一篇关于使用C语言解决寻找特定单词的‘兄弟单词’问题的笔记。问题要求找到给定单词在字典序下的第k个兄弟单词。文章详细介绍了解题思路,包括获取数据、排序、判断兄弟单词等步骤,并提供了相应的代码实现。
678

被折叠的 条评论
为什么被折叠?



