Skip to content

Commit f3b5f7f

Browse files
author
openset
committed
Add: Camelcase Matching
1 parent 7819da2 commit f3b5f7f

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package camelcase_matching
2+
3+
import "regexp"
4+
5+
func camelMatch(queries []string, pattern string) []bool {
6+
ans, ptn := make([]bool, len(queries)), []rune("[a-z]*")
7+
for _, r := range pattern {
8+
ptn = append(ptn, r)
9+
ptn = append(ptn, []rune("[a-z]*")...)
10+
}
11+
reg := regexp.MustCompile(string(ptn))
12+
for i, q := range queries {
13+
ans[i] = reg.FindString(q) == q
14+
}
15+
return ans
16+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package camelcase_matching
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
type caseType struct {
9+
queries []string
10+
pattern string
11+
expected []bool
12+
}
13+
14+
func TestCamelMatch(t *testing.T) {
15+
tests := [...]caseType{
16+
{
17+
queries: []string{"FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"},
18+
pattern: "FB",
19+
expected: []bool{true, false, true, true, false},
20+
},
21+
{
22+
queries: []string{"FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"},
23+
pattern: "FoBa",
24+
expected: []bool{true, false, true, false, false},
25+
},
26+
{
27+
queries: []string{"FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"},
28+
pattern: "FoBaT",
29+
expected: []bool{false, true, false, false, false},
30+
},
31+
{
32+
queries: []string{"CompetitiveProgramming", "CounterPick", "ControlPanel"},
33+
pattern: "CooP",
34+
expected: []bool{false, false, true},
35+
},
36+
{
37+
queries: []string{"aksvbjLiknuTzqon", "ksvjLimflkpnTzqn", "mmkasvjLiknTxzqn", "ksvjLiurknTzzqbn", "ksvsjLctikgnTzqn", "knzsvzjLiknTszqn"},
38+
pattern: "ksvjLiknTzqn",
39+
expected: []bool{true, true, true, true, true, true},
40+
},
41+
}
42+
for _, tc := range tests {
43+
output := camelMatch(tc.queries, tc.pattern)
44+
if !reflect.DeepEqual(output, tc.expected) {
45+
t.Fatalf("input: %v, output: %v, expected: %v", tc.pattern, output, tc.expected)
46+
}
47+
}
48+
}

0 commit comments

Comments
 (0)