描述
对于给定的由大小写字母、数字和空格混合构成的字符串 s,给定字符 c,按要求统计:
- 若 c为大写或者小写字母,统计其大小写形态出现的次数和;
- 若 c 为数字,统计其出现的次数。
保证字符 c 要么为字母、要么为数字。
输入描述:
第一行输入一个长度 1≦length(s)≦10³,由大小写字母、数字和空格构成的字符串 s。保证首尾不为空格。
第二行输入一个字符 c,保证 c 为大小写字母或数字。
输出描述:
在一行上输出一个整数,代表统计结果。
示例1
输入:
HELLONowcoder123
o
输出:
3
说明:
由于 o 为小写字母,因此统计其大小写形态出现的次数和,即 3。
示例2
输入:
H E L L O Nowcoder123
1
输出:
1
解题思路
这个问题是字符统计 问题,需要根据字符 c的类型进行不同的统计:
-
字符类型判断:
-
如果
c是字母(大写或小写):统计这个字母的大小写形态的总出现次数 -
如果
c是数字:只统计这个数字的出现次数
-
-
关键点:
-
输入字符串可能包含字母、数字、空格
-
首尾保证不为空格
-
字符
c要么是字母要么是数字 -
字符串长度不超过 10³(1000)
-
-
处理逻辑:
-
遍历字符串的每个字符
-
根据
c的类型进行匹配 -
如果是字母,需要匹配不区分大小写的字符
-
如果是数字,需要精确匹配
-
JavaScript 解决方案
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let inputLines = [];
let lineCount = 0;
rl.on('line', (line) => {
inputLines.push(line);
lineCount++;
if (lineCount === 2) {
const s = inputLines[0]; // 原始字符串
const c = inputLines[1]; // 目标字符
let count = 0;
// 判断c是否为字母
if (/[a-zA-Z]/.test(c)) {
// 字母:统计大小写形态
const lowerC = c.toLowerCase();
const upperC = c.toUpperCase();
for (let i = 0; i < s.length; i++) {
const char = s[i];
if (char === lowerC || char === upperC) {
count++;
}
}
} else {
// 数字:精确匹配
for (let i = 0; i < s.length; i++) {
if (s[i] === c) {
count++;
}
}
}
console.log(count);
rl.close();
}
});