1. 每日一言
世界微尘里,吾宁爱与憎。
2. 题目
题目链接:判断句子是否为全字母句
全字母句 指包含英语字母表中每个字母至少一次的句子。
给你一个仅由小写英文字母组成的字符串 sentence ,请你判断 sentence 是否为 全字母句 。
如果是,返回 true ;否则,返回 false 。
-
示例 1:
输入:sentence = “thequickbrownfoxjumpsoverthelazydog”
输出:true
解释:sentence 包含英语字母表中每个字母至少一次。 -
示例 2:
输入:sentence = “leetcode”
输出:false
提示:
1 <= sentence.length <= 1000
sentence 由小写英语字母组成
与这一题有点类似:使用C语言统计一个字符串中每个字母出现的次数
3. 解题思路
- 使用 calloc 函数为大小为26的整数数组 arr 分配内存空间,并将所有元素初始化为0。这个数组的每个位置对应字母表中的一个字母,用于记录该字母是否在句子中出现过。
- 新建一个 count 变量并初始化为0,用于计数句子中出现的不同字母的数量。
- 通过 for 循环遍历给定句子中的每个字符,直到遇到字符串的结尾标志 \0。
- 在循环中,代码将当前字符转换为对应的字母表索引,即 sentence[i] - ‘a’,并通过比较当前位置的值来判断该字母是否在句子中出现过。如果当前字母在之前的遍历中还未出现过,则将其标记为已出现,并将计数器 count 增加1。
- 完成遍历后,如果 count 的值为26,即所有字母都至少出现了一次,则返回 true 表示给定句子是一个完美的pangram。
- 如果 count 的值不为26,即不是所有字母都至少出现一次,则返回 false。
4. 代码
bool checkIfPangram(char* sentence) {
int* arr = (int*)calloc(26,sizeof(int));//用来记录字母是否出现过
int count = 0;//用来计数
for(int i = 0; sentence[i] != '\0'; i++) {
if(arr[sentence[i]-'a'] == 0) {
arr[sentence[i]-'a'] = 1;
count++;
}
}
if(count == 26) {
return true;
}
free(arr);
return false;
}
5. 题目
题目链接:宝石与石头
给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
字母区分大小写,因此 “a” 和 “A” 是不同类型的石头。
- 示例 1:
输入:jewels = “aA”, stones = “aAAbbbb”
输出:3 - 示例 2:
输入:jewels = “z”, stones = “ZZ”
输出:0
提示:
1 <= jewels.length, stones.length <= 50
jewels 和 stones 仅由英文字母组成
jewels 中的所有字符都是 唯一的
6. 解题思路
-
首先,使用 calloc 函数为 bool 类型的数组 arr 分配具有 58 个元素的空间,并将所有元素初始化为 false。这个数组用于记录哪些字母是珠宝字符。
-
然后,通过 for 循环遍历字符串 jewels 中的每个字符。在循环中,如果 arr[jewels[i]-‘A’] 的值是 false,表示该字符未被标记为珠宝字符,于是将其标记为 true。这一步骤遍历完后,arr 数组会记录下 jewels 中所有不同的字符。
-
接下来,代码初始化了一个整型变量 sum 为 0,用来存储包含在 stones 中的珠宝字符的数量。
-
再次使用 for 循环遍历 stones 中的每个字符。如果 arr 数组中对应位置的值为 true,说明该字符为珠宝字符,将 sum 的值增加 1。
-
最后,函数返回变量 sum 的值,即为在字符串 stones 中出现的属于字符串 jewels 的字符个数。
7. 代码
int numJewelsInStones(char* jewels, char* stones) {
bool *arr = (bool*)calloc(58,sizeof(bool));
for(int i = 0; jewels[i] != '\0'; i++) {
if(arr[jewels[i]-'A'] == false) {
arr[jewels[i]-'A'] = true;
}
}
int sum = 0;
for(int i = 0; stones[i] != '\0'; i++) {
if(arr[stones[i]-'A']) {
++sum;
}
}
free(arr);
return sum;
}
8. 结语
这两个题是类似的,可以用哈希集合的方法来解决。
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正