华为OD机试 - 计算某个字符出现次数 - 线性扫描(Python/JS/C/C++ 2025 B卷 100分)

在这里插入图片描述

2025B卷华为OD机试统一考试题库清单(持续收录中)以及考点说明(Python/JS/C/C++)

专栏导读

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

一、题目描述

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

二、输入描述

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

三、输出描述

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

四、测试用例

测试用例1:

1、输入

Hello World
o

2、输出

2

测试用例2:

1、输入

abc123def
1

2、输出

1

五、解题思路

这是一个字符串字符统计问题,需要在给定字符串中统计特定字符的出现次数。

线性扫描是一种最基础的遍历算法,它按照数据结构的自然顺序(通常是从头到尾)逐个访问每个元素,对每个元素执行相同的操作或检查。

线性扫描的基本模式:

// 线性扫描的通用模式
for (int i = 0; i < data.length; i++) {
    // 对当前元素 data[i] 执行操作
    if (满足某种条件) {
        // 执行相应操作
    }
}

六、Python算法源码

# 读取第一行输入:由字母、数字和空格组成的字符串
input_string = input()

# 读取第二行输入:目标字符(保证不为空格)
target_char = input()

# 将输入字符串和目标字符都转换为小写,实现不区分大小写的比较
lower_input_string = input_string.lower()
lower_target_char = target_char.lower()

# 初始化计数器,用于统计目标字符的出现次数
count = 0

# 遍历输入字符串的每个字符
for char in lower_input_string:
    # 如果当前字符与目标字符相同,计数器加1
    if char == lower_target_char:
        count += 1

# 输出目标字符在输入字符串中的出现次数
print(count)

七、JavaScript算法源码

// 引入readline模块用于读取控制台输入
const readline = require('readline');

// 创建readline接口
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

// 存储输入数据的数组
let inputs = [];

// 监听行输入事件
rl.on('line', (input) => {
    // 将每行输入存储到数组中
    inputs.push(input);
    
    // 当收集到两行输入时开始处理
    if (inputs.length === 2) {
        // 获取第一行输入:由字母、数字和空格组成的字符串
        let inputString = inputs[0];
        
        // 获取第二行输入:目标字符(保证不为空格)
        let targetChar = inputs[1];
        
        // 将输入字符串和目标字符都转换为小写,实现不区分大小写的比较
        let lowerInputString = inputString.toLowerCase();
        let lowerTargetChar = targetChar.toLowerCase();
        
        // 初始化计数器,用于统计目标字符的出现次数
        let count = 0;
        
        // 遍历输入字符串的每个字符
        for (let i = 0; i < lowerInputString.length; i++) {
            // 如果当前字符与目标字符相同,计数器加1
            if (lowerInputString[i] === lowerTargetChar) {
                count++;
            }
        }
        
        // 输出目标字符在输入字符串中的出现次数
        console.log(count);
        
        // 关闭readline接口
        rl.close();
    }
});

八、C算法源码

#include <stdio.h>      // 标准输入输出库
#include <string.h>     // 字符串处理库
#include <ctype.h>      // 字符类型判断和转换库

int main() {
    // 定义字符数组存储输入字符串,假设最大长度为1000
    char input_string[1001];
    
    // 定义变量存储目标字符
    char target_char;
    
    // 读取第一行输入:由字母、数字和空格组成的字符串
    // 使用fgets读取一行,包含换行符
    fgets(input_string, sizeof(input_string), stdin);
    
    // 读取第二行输入:目标字符(保证不为空格)
    scanf("%c", &target_char);
    
    // 将目标字符转换为小写,实现不区分大小写的比较
    char lower_target_char = tolower(target_char);
    
    // 初始化计数器,用于统计目标字符的出现次数
    int count = 0;
    
    // 获取输入字符串的长度
    int len = strlen(input_string);
    
    // 遍历输入字符串的每个字符
    for (int i = 0; i < len; i++) {
        // 将当前字符转换为小写进行比较
        char lower_current_char = tolower(input_string[i]);
        
        // 如果当前字符与目标字符相同,计数器加1
        if (lower_current_char == lower_target_char) {
            count++;
        }
    }
    
    // 输出目标字符在输入字符串中的出现次数
    printf("%d\n", count);
    
    // 程序正常结束
    return 0;
}

九、C++算法源码

#include <iostream>     // 标准输入输出流库
#include <string>       // 字符串类库
#include <cctype>       // 字符类型判断和转换库

using namespace std;    // 使用标准命名空间

int main() {
    // 定义字符串变量存储输入字符串
    string input_string;
    
    // 定义字符变量存储目标字符
    char target_char;
    
    // 读取第一行输入:由字母、数字和空格组成的字符串
    // 使用getline读取整行,包括空格
    getline(cin, input_string);
    
    // 读取第二行输入:目标字符(保证不为空格)
    cin >> target_char;
    
    // 将目标字符转换为小写,实现不区分大小写的比较
    char lower_target_char = tolower(target_char);
    
    // 初始化计数器,用于统计目标字符的出现次数
    int count = 0;
    
    // 遍历输入字符串的每个字符
    for (int i = 0; i < input_string.length(); i++) {
        // 将当前字符转换为小写进行比较
        char lower_current_char = tolower(input_string[i]);
        
        // 如果当前字符与目标字符相同,计数器加1
        if (lower_current_char == lower_target_char) {
            count++;
        }
    }
    
    // 输出目标字符在输入字符串中的出现次数
    cout << count << endl;
    
    // 程序正常结束
    return 0;
}

🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2025 B卷 200分)

🏆本文收录于,华为OD机试真题(Python/JS/C/C++)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值