查找不在数组里的字母

题目:有一个数组包含 很多字母,如何查找 26 个字母 不在 里面的字母

            eg: {a,b,c,c,c,c} 那么就是 d - z

算法思路:维护一个 整形数组 对应 字母数组的 asci 码, 查找 字母数组,如果某字母出现一次,对应的 整形数组 就 + 1。最后,整形 数组为 0 的,就是没出现的。

C#代码实现如下:

            //1. 1+'a' 会得到一个数字
            //2. 为了使 算法更完善,加入一个 计数,如果 26 个字母都找到了,就不需要在找了

            char[] chArr = new char[] { 'a', 'b', 'c', 'd', 'e', 'g', 'k', 'k', 'l', 'l', 'z' };
            int[] intArr = new int[26];
            int num = 26;

            for(int i = 0;i < chArr.Length;i++)
            {
                if (intArr[chArr[i] - 'a'] == 0 && num > 0)
                {
                    intArr[chArr[i] - 'a']++;
                    num--;
                }
            }

            for (int i = 0; i < intArr.Length;i++ )
            {
                if (intArr[i] == 0)
                    Console.WriteLine(Convert.ToChar(i + 'a'));
            }

这只是本人的想法和实现,如果有其它意见的,欢迎提出讨论。


在 C 语言中,查找字符型数组中出现次数最多的字母并按照字母表顺序输出,可以使用哈希表(如数组或结构体)来记录每个字母及其出现次数,然后遍历一次数组。以下是步骤: 1. 定义一个结构体 `CountChar`,包含字母(char)和计数(int)两个字段: ```c typedef struct { char letter; int count; } CountChar; ``` 2. 初始化一个空的 `CountChar` 数组,长度等于ASCII码最大值减去最小值加1,用于存储所有可能的字母以及它们出现的次数: ```c CountChar countTable[26] = {0}; ``` 3. 遍历输入的字符数组,对每个字符执行以下操作: - 将字符转换为小写字母,以便忽略大小写的差异。 - 计算当前字符对应的索引(`'a'-'A'`)。 - 如果该索引处的计数为0,表示第一次遇到这个字母,初始化其计数为1。 - 否则,将计数加一。 4. 遍历结束后,找到最大计数值的位置,即出现次数最多的字母的索引。由于我们只关心最常见的字母,不需要维护完整的频率数组。 5. 根据索引找到字母,并按字母表顺序输出,同时检查是否有多个字母出现次数最多,如果存在,则输出所有这样的字母。 下面是伪代码示例: ```c for (i = 0; i < strlen(input); i++) { char currentChar = tolower(input[i]); if (currentChar >= 'a' && currentChar <= 'z') { countTable[currentChar - 'a'].count++; } } int maxCount = 0; for (i = 0; i < 26; i++) { if (countTable[i].count > maxCount) { maxCount = countTable[i].count; } } // 找到出现次数最多的字母 for (i = 0; i < 26; i++) { if (countTable[i].count == maxCount) { printf("%c", countTable[i].letter); } } ``` 注意:这种方法适用于单字节编码的字符集(如ASCII)。对于UTF-8等多字节编码,需要处理更复杂的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值