# 2070-从字符串中剔除指定字符

# 题目描述

从字符串中剔除指定字符。

例如:

type Butterfly = DropChar<' b u t t e r f l y ! ', ' '>; // 'butterfly!'

# 分析

这一题其实是 实现 ReplaceAll 的简化版,对于 ReplaceAll 来讲,就是将 To 替换成了 空字符。

ReplaceAll 是这么解的:

type ReplaceAll<S extends string, From extends string, To extends string> =
  // 特殊情况处理
  From extends ''
    ? S
    : S extends `${infer F}${From}${infer R}`
    ? // 核心在于 递归嵌套处理剩余字符
      `${F}${To}${ReplaceAll<R, From, To>}`
    : S;

type DropChar<S extends string, From extends string> = ReplaceAll<S, From, ''>;

除了根据 ReplaceAll,也可以直接根据匹配推断 + 递归解决嵌套问题。

# 题解

type DropChar<
  S extends string,
  From extends string,
> = S extends `${infer F}${infer R}`
  ? F extends From
    ? DropChar<R, From>
    : `${F}${DropChar<R, From>}`
  : '';

在上述解法中,由于没有使用 ${From} 这样的匹配,故不需要处理 From = '' 这种特殊的边界场景。

# 知识点

  1. 递归解决嵌套问题
  2. 字符匹配推断套路。A extends `${infer F}${infer R}%`
Last Updated: 2023/5/16 06:00:28