Skip to content

Commit 2bf79d3

Browse files
authored
feat: add solutions to lc problem: No.2171 (doocs#2238)
1 parent 98aed30 commit 2bf79d3

File tree

1 file changed

+84
-0
lines changed
  • solution/3000-3099/3008.Find Beautiful Indices in the Given Array II

1 file changed

+84
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
func beautifulIndices(s string, a string, b string, k int) []int {
2+
3+
4+
s_len := len(s)
5+
a_len := len(a)
6+
b_len := len(b)
7+
8+
final := make([]int, 0)
9+
lps_a := make([]int, a_len)
10+
lps_b := make([]int, b_len)
11+
a_index := make([]int, 0)
12+
b_index := make([]int, 0)
13+
14+
var pat func(lps []int, s_l int, pattern string)
15+
16+
pat = func(lps []int, s_l int, pattern string){
17+
18+
l := 0
19+
lps[0] = 0
20+
i := 1
21+
22+
for i < s_l {
23+
if pattern[i] == pattern[l] {
24+
l++
25+
lps[i] = l
26+
i++
27+
} else {
28+
if l != 0 {
29+
l = lps[l-1]
30+
} else {
31+
lps[i] = l
32+
i++
33+
}
34+
}
35+
}
36+
}
37+
38+
pat(lps_a, a_len, a)
39+
pat(lps_b, b_len, b)
40+
41+
var kmp func(pat string, pat_l int, lps []int, index *[]int)
42+
43+
kmp = func(pat string, pat_l int, lps []int, index *[]int){
44+
i := 0
45+
j := 0
46+
for s_len - i >= pat_l - j {
47+
if s[i] == pat[j]{
48+
i++
49+
j++
50+
}
51+
if j == pat_l{
52+
*index = append(*index, i-pat_l)
53+
j = lps[j-1]
54+
} else if s[i] != pat[j] {
55+
if j!=0 {
56+
j = lps[j-1]
57+
} else {
58+
i++
59+
}
60+
}
61+
}
62+
}
63+
64+
kmp(a, a_len, lps_a, &a_index)
65+
kmp(b, b_len, lps_b, &b_index)
66+
67+
// fmt.Println(a_index, b_index)
68+
69+
i := 0
70+
j := 0
71+
72+
for i < len(a_index) && j < len(b_index) {
73+
if a_index[i]+k >= b_index[j] && a_index[i]-k <= b_index[j]{
74+
final = append(final, a_index[i])
75+
i++
76+
} else if a_index[i] - k > b_index[j]{
77+
j++
78+
} else {
79+
i++
80+
}
81+
}
82+
83+
return final
84+
}

0 commit comments

Comments
 (0)