题目描述
- 给定一个字符串数组和一个匹配串,判断每个字符串是否能跟匹配串匹配
- 可以理解成匹配串按驼峰分割,能在字符串中依次匹配
- 如 FoB -> Fo, B,可以匹配 FoxxxBxxx
示例
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FB"
输出:[true,false,true,true,false]
示例:
"FooBar" 可以这样生成:"F" + "oo" + "B" + "ar"
"FootBall" 可以这样生成:"F" + "oot" + "B" + "all"
"FrameBuffer" 可以这样生成:"F" + "rame" + "B" + "uffer"
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBa"
输出:[true,false,true,false,false]
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBaT"
输出:[false,true,false,false,false]
题解
- 思路
- 数据范围不大,模拟即可
- 模拟思路:双指针,相同的就往后走;不相等的,若字符串是小写,跳下一轮,若字符串是大写,必须匹配,不匹配就是 false
func camelMatch(queries []string, pattern string) []bool {
res := make([]bool, len(queries))
for i, q := range queries {
res[i] = check(q, pattern)
}
return res
}
func check(a, b string) bool {
j := 0
for _, c := range a {
if j < len(b) && byte(c) == (b)[j] {
j ++
} else if c <= 'Z' {
return false
}
}
return j == len(b)
}