专栏导读
本专栏收录于《华为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算法的适用场景,发现新题目,随时更新。