复试算法练习Day02——字符串中单个字符出现次数

算法练习Day02

题目描述

写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)

数据范围: 1 \le n \le 1000 \1≤n≤1000

输入描述

第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。

输出描述

输出输入字符串中含有该字符的个数。(不区分大小写字母)

示例1

输入:

ABCabc
A

复制

输出:

2

复制

说明:

输出字符含有A的个数为02

思路

直接正序遍历字符串数组,通过指针找到相同的字符后计数输出;
在用Python写的时候采用另一种Python特性的基于字典的精简版字符串字母出现次数的函数,通过采用dict[i]来表示字典中字母对应出现的次数,并将其记为(value字符个数);
最后利用dict.get(i,0)+1,这是为了表示的是从字典获取字母的数量,如果字典中没有查到对应字母,则把1存入字典中
,这种方法利用了Python字典所以看起来更简洁、方便理解。

复杂度

由于进行了一次遍历所以时间复杂度为O(n)

建立了一个数组故空间复杂度为O(n)

具体实现

#include<stdio.h>
#include<string.h>

int main(void)
{
    //构造并初始一个包含200个指针的数组str,并初始化char指针数组
    char* str[100] = {0};
    //设置指向数组的指针q
    char* q = str;
    //定义输入字符变量,并初始化
    char input = {0};
    int i = 0;
    int j = 0;
    //这个是获取所有的字符
    gets(str);
    //获取字符,注意scanf获取的停止标志是EOF
    //字符应该是%c而不是%d,除了字符串都要&
    scanf("%c", &input);
   //如果数组不为空则遍历查找相同字符并计数
    while (q[i] != '\0'){
        if (tolower(p[i]) == tolower(input)){
        //tolower函数将字母转换为小写字母
            j++;
        }
        i++;
    }
    printf("%d", j);
    return 0;
}

##精简版字符串字母出现次数
#dict[i]表示的是字典中字母对应的出现的次数记为(value)
#dict.get(i,0)+1表示的是从字典获取字母,如果字典中没有查到对应字母,则存1入字典
#简单粗暴
def count_each_char(str):
    dict = {}
    for i in str:
        dict[i]=dict.get(i,0)+1
    return dict

小结

采用get可以直接得到带有空格字符的处理表达式,获取字符采用scanf函数时要用%c,利用tolower函数可以将字符都转换为小写字母方便比较。

用Python直接将字符存在次数存入字典,又快又好用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值