题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
#include <stdio.h>
#include <string.h>
typedef struct{
char str[16];
char flag;
}W_NODE;
//判断兄弟字串
int checkBSwap(char *test, char *s)
{
char temp[16] = {0};
int findBFlag = 0;
int count = 0;
int len = strlen(s);
if(strlen(test) != len)
return 0;
if(0 == strcmp(test,s))
return 0;
strcpy(temp,test);
for(int i= 0; i < len; i++)
{
for(int j = 0; j < len; j++)
{
if(s[i] == temp[j]){
temp[j] = 0;
count++;
break;
}
}
}
if(count == len)
return 1;
else
return 0;
}
//判断循环偏移字串
int checkB(char *test, char *s)
{
int len = strlen(s);
int findFlagi = 1;
int findBFlag = 0;
if(strlen(test) != len)
return 0;
for(int i = 1; i < len; i++)
{
for(int j = 0; j < len; j++)
{
if(test[j] != s[(i+j)%len])
findFlagi = 0;
}
if(1 == findFlagi){
findBFlag = 1;
return findBFlag;
}
findFlagi = 1;
}
return findBFlag;
}
int main() {
int wCount = 0;
W_NODE Ws[1000] = {0};
char x[16] = {0};
int k = 0;
scanf("%d",&wCount);
int idx = 0;
char ch = 0;
getchar();
int i = 0;
while(idx < wCount){
ch = getchar();
if(' ' == ch)
{
i = 0;
idx++;
}else{
Ws[idx].str[i++] = ch;
}
}
i = 0;
while(' ' != (ch = getchar())){
x[i++] = ch;
}
scanf("%d",&k);
//字典排序
W_NODE temp;
for(int i = 0; i < wCount; i++)
{
for(int j = i; j < wCount; j++)
{
if(strcmp(Ws[i].str,Ws[j].str) > 0)
{
temp = Ws[i];
Ws[i] = Ws[j];
Ws[j] = temp;
}
}
}
idx = 0;
int outIndex = 0;
int findXFlag = 0;
for(int i = 0; i < wCount; i++){
if(1 == checkBSwap(Ws[i].str, x))
{
Ws[i].flag = 1;
idx++;
if(k == idx){
outIndex = i;
findXFlag = 1;
}
}
}
printf("%d\n",idx);
if(1 == findXFlag)
printf("%s",Ws[outIndex].str);
return 0;
}
