# 👉 字符串数组相关

# 滑动窗口

  • 3. 无重复字符的最长子串 (opens new window)

  • 滑动窗口、快慢指针、双指针区别

    • 双指针是常规解法,通常和排序相结合,达到𝑂(𝑛^2)变为O(n)的效果
    • 快慢指针,一般是特定题目(找环,找中点等等),快慢指针通常比较巧妙
    • 滑动窗口,基本都是字符串的子串问题,因为子串需要连续,导致我们的结果取自字符串的一段,类似于窗口
  • 截取字符串的方法

    • substring:不修改原字符串,第二个参数表示结束位置-1,第二个参数可选
    const str = 'hello world';
    
    // 从索引1到4,不包含4
    console.log(1,4); // ell
    
    // 从索引1到结尾
    console.log(1) // ello world
    
    // 参数会自动调整顺序
    console.log(str.substring(4, 1));  // "ell"(等同于substring(1, 4))
    
    • slice:不修改原字符串,支持负数起始索引(常用)
    const str = 'hello world';
    
    // 从索引1到4(不包含4)
    console.log(str.slice(1, 4));  // "ell"
    
    // 从索引1到末尾
    console.log(str.slice(1));     // "ello World"
    
    // 负数索引(从末尾开始计数)
    console.log(str.slice(-5));     // "World"
    console.log(str.slice(-5, -1)); // "Worl"
    
    
    • substr:不修改原字符串,第二个参数表示长度,支持负数起始索引

# 反转字符串

# 回文字符串

# 正则表达式子

# 判断是否是电话号码

function isPhone(phone) {
    // ^x表示以x开头,$表示结尾,[xyz]表示xyz中的任意一个,{n}表示重复n次
    const phoneReg = /^1[35789]\d{9}$/;
    return phoneReg.test(phone);
}

# 验证是否是邮箱

function isEmail(email) {
  const emailReg = //;
  return emailReg.test(email);
}

# 验证是否是身份证

function isEmail(email) {
  const emailReg = //;
  return emailReg.test(email);
}

# 解析 URL

# 解析 URL Params 为对象

  • 获取 url 中的参数:
    • 指定参数名称,返回该参数的值 或者 空字符串
    • 不指定参数名称,返回全部的参数对象 或者 {}
    • 如果存在多个同名参数,则返回数组
    • decodeURIComponent 对中文解码

# 查找字符串中出现最多的字符和个数

# 模板引擎实现

实现效果:

let template = "我是{{name}},年龄{{age}},性别{{sex}}";
let data = {
    name: "姓名",
    age: 18,
};
render(template, data); // 我是姓名,年龄18,性别undefined