字符串-字符串的包含-寻找兄弟字符串 课后题答案

问题:如果两个字符串中的字符串一样,出现的次数也一样,只是顺序不同,则认为两个字符串是兄弟字符串.现在提供一个字符串,请问如何在字典中迅速找到他的兄弟字符串

/*
2016 9 27
问题:
如果两个字符串中的字符串一样,出现的次数也一样,只是顺序不同,则认为两个字符串是兄弟字符串.
现在提供一个字符串,请问如何在字典中迅速找到他的兄弟字符串
1.简单起见字符串的元素都为小写
2.目标abc  字典为kjjhkjdkfnsljdfcbakjhjbcaacb(有cba bca acb三个兄弟)
思路 
1.建立一个26个元素的数组,对应26个字母,某个字母出现一次则在对应的位置++
2.一次在字典中取出三个元素组成待验证字符串,按1步骤处理
3.比较两个数组是否相同,若相同则是兄弟字符串
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
/*
判断是否为兄弟a是比较的字符串,b是字典
*/
int FindCharBrother(char *a,char *b,int left,int right)
{
    int arr_a[26]={0};
	int arr_obj[26]={0};
	int i;
	for(i=0;i<strlen(a);i++)
	{
	    arr_a[a[i]-'a']++;
	}
	for(i=left;i<right;i++)
	{
	    arr_obj[b[i]-'a']++;
	}

	//判断两个数组是否相同
	for(i=0;i<26;i++)
	{
	    if(arr_a[i]!=arr_obj[i])
			return 0;
	}
	return 1;
}
/*
打印兄弟字符串
*/
void PrinCharBrother(char *b,int left,int right)
{
    int i;
    for(i=left;i<right;i++)
    {
        printf("%c",b[i]);
    }
	printf("\n");
}
/*
依次在字典中取出strlen(a)元素,用FindCharBrother()判断是否为兄弟
*/
void CharBrother(char *a,char *b)
{
    int i;
	int flag;
	for(i=0;i<strlen(b);i++)
	{
	    flag=FindCharBrother(a,b,i,i+strlen(a));//依次在字典中取出strlen(a)元素判断是否为兄弟
	    if(flag)
			PrinCharBrother(b,i,i+strlen(a));
	}
}
int main()
{
    char a[]="abc";
	char b[]="kjjhkjdkfnsljdfcbakjhjbcaacb";//字典
	CharBrother(a,b);
}
./a.out
cba
bca
acb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值