LeetCode-Python-1023. 驼峰式匹配

664 篇文章 23 订阅

如果我们可以将小写字母插入模式串 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. 1 <= queries.length <= 100
  2. 1 <= queries[i].length <= 100
  3. 1 <= pattern.length <= 100
  4. 所有字符串都仅由大写和小写英文字母组成。

思路:

双指针法,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
                
        

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值