一、算法思路
本题目要求统计子串在主字符串中的出现次数,支持大小写不敏感的匹配。可以通过以下步骤解决:
- 大小写忽略:
- 将主字符串和子字符串统一转换为小写,确保匹配时不区分大小写。
- 字符串分割:
- 使用
split
方法将主字符串按子串分割,得到分割段数减一,即为子串的出现次数。
- 使用
- 边界条件处理:
- 确保主字符串和子字符串的输入有效,避免异常情况(如输入不是字符串)。
二、Code
以下是简洁的代码版本,并添加详细注释:
// 引入 readline 模块,用于从标准输入读取数据
const rl = require("readline").createInterface({ input: process.stdin });
// 创建异步迭代器,支持逐行读取输入
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
// 异步立即执行函数,主逻辑入口
void (async function () {
// 读取主字符串
const line = await readline();
// 读取子字符串
const code = await readline();
/**
* 统计子串出现次数的函数
* @param {string} str - 主字符串
* @param {string} s - 子字符串
* @returns {number} - 子串在主字符串中的出现次数
*/
function findSum(str, s) {
// 将主字符串转换为小写,忽略大小写差异
const res = str.toLocaleLowerCase();
// 使用 split 按子字符串分割,计算分割段数减 1
return res.split(s.toLocaleLowerCase()).length - 1;
}
// 输出子串出现的次数
console.log(findSum(line, code));
})();