算法练习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直接将字符存在次数存入字典,又快又好用