9286 - FirstUniqueCharIndex
给定一个字符串 s
,找到其中第一个不重复的字符并返回其索引。如果不存在,返回 -1
Solution
type FirstUniqueCharIndex<
T extends string,
C extends string[] = []
> = T extends `${infer F}${infer R}`
? F extends C[number]
? FirstUniqueCharIndex<R, [...C, F]>
: R extends `${string}${F}${string}`
? FirstUniqueCharIndex<R, [...C, F]>
: C['length']
: -1
通过递归实现遍历。在每次递归时向泛型 C
中添加 T
中的单个字符
一开始先判断 T
是否可以分割为首字符 F
和剩余字符串 R
,
- 可以, 判断已经遍历过的字符数组
C
中是否存在F
- 存在, 说明有重复字符, 不处理并继续递归剩余元素, 并将
F
加入C
中 - 不存在, 判断剩余字符串是否包含
F
- 包含
F
, 说明有重复字符, 不处理并继续递归剩余元素, 并将F
加入C
中 - 不包含
F
, 说明F
前后都无重复字符, 则直接返回当前索引值, 即C['length']
- 包含
- 存在, 说明有重复字符, 不处理并继续递归剩余元素, 并将
- 不可以, 表示
T
是空字符, 直接返回 -1