专栏导读
本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。
一、题目描述
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)。
二、输入描述
第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。
三、输出描述
输出输入字符串中含有该字符的个数。(不区分大小写字母)。
四、测试用例
测试用例1:
1、输入
Hello World
o
2、输出
2
3、说明
字符串"Hello World"中有2个’o’字符
测试用例2:
1、输入
ABCabc123
A
2、输出
2
3、说明
字符串中有’A’和’a’各一个,不区分大小写共2个
五、解题思路
- 使用Scanner读取输入:第一行是字符串,第二行是一个字符
- 将符串和目标字符都转换为小写,实现不区分大小写
- 遍历字符串中的每个字符,与目标字符比较,相同则计数器加1
- 输出计数结果
选择这种方法的原因是它简单直接且高效。由于只需要遍历一次字符串,没有必要使用更复杂的数据结构。字符串转小写后直接遍历比较是最直观的解决方案。
六、Python算法源码
# 读取输入的字符串
input_string = input()
# 读取目标字符
target_char = input()
# 将输入的字符串和目标字符都转为小写,以实现不区分大小写
lower_str = input_string.lower()
lower_target = target_char.lower()
# 统计字符出现次数
count = lower_str.count(lower_target[0]) # 取目标字符的第一个字符
# 输出结果
print(count)
七、JavaScript算法源码
const readline = require('readline');
// 创建readline接口实例
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let inputString = ''; // 存储第一行输入的字符串
let lineCount = 0; // 记录当前读取的行数
// 监听行输入事件
rl.on('line', (line) => {
if (lineCount === 0) {
// 读取第一行字符串
inputString = line;
lineCount++;
} else if (lineCount === 1) {
// 读取第二行字符(取第一个字符)
const targetChar = line.charAt(0);
// 将输入的字符串和目标字符都转为小写,以实现不区分大小写
const lowerStr = inputString.toLowerCase();
const lowerTarget = targetChar.toLowerCase();
// 统计字符出现次数
let count = 0;
for (let i = 0; i < lowerStr.length; i++) {
if (lowerStr[i] === lowerTarget) {
count++;
}
}
// 输出结果
console.log(count);
// 关闭读取接口
rl.close();
}
});
八、C算法源码
#include <stdio.h>
#include <string.h>
#include <ctype.h> // 包含字符处理函数
#define MAX_LENGTH 1000 // 定义字符串最大长度
int main() {
char inputString[MAX_LENGTH]; // 存储输入的字符串
char targetChar; // 存储目标字符
// 读取第一行字符串
fgets(inputString, MAX_LENGTH, stdin);
// 移除末尾的换行符
size_t len = strlen(inputString);
if (len > 0 && inputString[len-1] == '\n') {
inputString[len-1] = '\0';
len--; // 更新长度
}
// 读取第二行字符
char targetLine[3]; // 多留一些空间以防意外
fgets(targetLine, 3, stdin);
targetChar = targetLine[0];
// 统计字符出现次数(不区分大小写)
int count = 0;
for (int i = 0; i < len; i++) {
if (tolower(inputString[i]) == tolower(targetChar)) {
count++;
}
}
// 输出结果
printf("%d\n", count);
return 0;
}
九、C++算法源码
#include <iostream>
#include <string>
#include <algorithm> // 包含transform函数
int main() {
std::string inputString; // 存储输入的字符串
char targetChar; // 存储目标字符
// 读取第一行字符串
std::getline(std::cin, inputString);
// 读取第二行字符
std::string targetLine;
std::getline(std::cin, targetLine);
targetChar = targetLine[0];
// 将输入的字符串和目标字符都转为小写
std::string lowerStr = inputString;
std::transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower);
char lowerTarget = std::tolower(targetChar);
// 统计字符出现次数
int count = 0;
for (char c : lowerStr) {
if (c == lowerTarget) {
count++;
}
}
// 输出结果
std::cout << count << std::endl;
return 0;
}
🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2025 B卷 200分)
🏆本文收录于,华为OD机试真题(Python/JS/C/C++)
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。