判断两字符串的字符集是否相同(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)
还没有任何评论哟~
