一、算法思路

本题目要求统计子串在主字符串中的出现次数,支持大小写不敏感的匹配。可以通过以下步骤解决:

  1. 大小写忽略
    • 将主字符串和子字符串统一转换为小写,确保匹配时不区分大小写。
  2. 字符串分割
    • 使用 split 方法将主字符串按子串分割,得到分割段数减一,即为子串的出现次数。
  3. 边界条件处理
    • 确保主字符串和子字符串的输入有效,避免异常情况(如输入不是字符串)。

二、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));
})();