Advertisement

判断两字符串的字符集是否相同(c语言描述)

阅读量:
注意个数不同也算相同如:aacd和ddccaa,只要字符相同就行

比较两个字符串的字符集合是否存在完全一致的情况;若不同则返回值为0;若相同则返回值为1;算法的时间复杂度限定为线性阶O(n)

首先初始化一个长度为256的辅助数组 helper 并将其全部置零(其ascll取值范围限定在0到255之间)。
接着遍历第一个字符串 ch0 ,应用计数排序原理:将字符转换为索引后,在对应位置将计数值设置为1。
然后依次遍历第二个字符串 ch1 ,对每个字符进行ascll转下标处理:若对应位置的计数值已经是2,则继续当前操作;若当前值仍为零,则直接返回结果零。
最后完成所有数据处理后检查整个_helper数组:若有元素值仍保持不变(即存在字符仅在第一个字符串中出现),则返回零;否则扫描完毕后返回一。

复制代码
    #include <stdio.h>
    #include <string.h>
    int zfc(char ch0[], char ch1[], int helper[])
    {
    	int len0 = strlen(ch0); //ch0的长度
    	int len1 = strlen(ch1); //ch1的长度
    	for (int i = 0; i < len0; i++)
    	{
    		helper[ch0[i]] = 1; //ascll转下标,对应位置赋值1
    	}
    	for (int i = 0; i < len1; i++)
    	{
    		if (helper[ch1[i]] == 1)
    		{
    			helper[ch1[i]] = 2; //ascll转下标,对应位置转1为2
    		}
    		else if(helper[ch1[i]] == 0)
    		{
    			return 0;
    		}
    	}
    	for (int i = 0; i < 256; i++)
    	{
    		if (helper[i] == 1) 
    		{
    			return 0;
    		}
    	}
    	return 1;
    }
    
    int main()
    {
    	char ch0[] = "aacdhj";
    	char ch1[] = "acjjjhd";
    	int helper[256] = { 0 };
    	int s = zfc(ch0, ch1, helper);
    	printf("%d\n", s);
    	return 0;
    }

全部评论 (0)

还没有任何评论哟~