找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

  • 输入: s = “cbaebabacd”, p = “abc”

  • 输出: [0,6]

  • 解释:
    起始索引等于 0 的子串是 “cba”, 它是 “abc” 的异位词。
    起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。

  • 输入: s = “abab”, p = “ab”

  • 输出: [0,1,2]

  • 解释:
    起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。
    起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。
    起始索引等于 2 的子串是 “ab”, 它是 “ab” 的异位词。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
var originalDigits = function(s) {
const map = {}
const res = []
s = s.split('')
s.forEach(item => {
map[item] ? map[item]++ : map[item] = 1
})
//console.log(map)
while (map['z']) {
decrease('zero',0)
}
//判断有没有2
while (map['w']) {
decrease('two',2)
}
//6
while (map['x']) {
decrease('six',6)
}
//8
while (map['g']) {
decrease('eight',8)
}
//4
while (map['u']) {
decrease('four',4)
}
//1
while (map['o']) {
decrease('one',1)
}
//7
while (map['s']) {
decrease('seven',7)
}
//3
while (map['t']) {
decrease('three',3)
}
//5
while (map['f']) {
decrease('five',5)
}
//9
while (map['n']) {
decrease('nine',9)
}
function decrease(string,num) {
string.split('').forEach((item) => {
map[item]--
})
res.push(num)
}
return res.sort((a,b)=>a-b).join('')
};