如果我们可以将小写字母插入模式串 pattern
得到待查询项 query
。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。)
给定待查询列表 queries
,和模式串 pattern
,返回由布尔值组成的答案列表 answer
。只有在待查项 queries[i]
与模式串 pattern
匹配时, answer[i]
才为 true
,否则为 false
。
示例 1:
输入: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".
示例 2:
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBa"
输出:[true,false,true,false,false]
解释:
"FooBar" 可以这样生成:"Fo" + "o" + "Ba" + "r".
"FootBall" 可以这样生成:"Fo" + "ot" + "Ba" + "ll".
示例 3:
输出:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBaT"
输入:[false,true,false,false,false]
解释:
"FooBarTest" 可以这样生成:"Fo" + "o" + "Ba" + "r" + "T" + "est".
提示:
1 <= queries.length <= 100
1 <= queries[i].length <= 100
1 <= pattern.length <= 100
- 所有字符串都仅由大写和小写英文字母组成。
思路:
双指针法,q指向query的每个元素, p指向pattern的每个元素,
如果当前位都匹配上,pq都前进一步,
如果没匹配上,而且q还是大写,说明肯定不对(题意要求只能插入小写字母),
如果没匹配上,q是小写,说明这一位是插入的小写字母,q+1即可,
如果p已经匹配完了,而q还有多的字母,就判断一下q中的剩下的字母是不是全为小写,如果不是,则不对;如是,代表这一个query是对的。
class Solution(object):
def camelMatch(self, queries, pattern):
"""
:type queries: List[str]
:type pattern: str
:rtype: List[bool]
"""
maxp = len(pattern)
res = list()
for query in queries:
p, q = 0, 0
maxq = len(query)
while p < maxp:
if q + maxp - p - 1 >= maxq: #即使q剩下的全部用来匹配,也无法匹配上所有的p
res.append(False)
break
if query[q] == pattern[p]:#匹配上了
q += 1
p += 1
if p == maxp:#pattern全部匹配上了,
flag = 1
for char in query[q + 1:]:
if char.isupper():
flag = 0
if flag: #而且query后面的都是小写,符合要求
res.append(True)
else:
res.append(False)
elif query[q].isupper():#PQ对不上,而且q还偷偷摸摸大写,肯定不对
res.append(False)
break
else:
q += 1
return res