# 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 = '' 这种特殊的边界场景。
# 知识点
- 递归解决嵌套问题
- 字符匹配推断套路。
A extends `${infer F}${infer R}%`
← 1978-百分比解析器 休息下 →