# A query word matches a given pattern if we can insert lowercase letters to the pattern word so that it equals the
# query. (We may insert each character at any position, and may insert 0 characters.)
#
# Given a list of queries, and a pattern, return an answer list of booleans, where answer[i] is true if and only if
# queries[i] matches the pattern.
#
#
#
# Example 1:
#
# Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FB"
# Output: [true,false,true,true,false]
# Explanation:
# "FooBar" can be generated like this "F" + "oo" + "B" + "ar".
# "FootBall" can be generated like this "F" + "oot" + "B" + "all".
# "FrameBuffer" can be generated like this "F" + "rame" + "B" + "uffer".
# Example 2:
#
# Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBa"
# Output: [true,false,true,false,false]
# Explanation:
# "FooBar" can be generated like this "Fo" + "o" + "Ba" + "r".
# "FootBall" can be generated like this "Fo" + "ot" + "Ba" + "ll".
# Example 3:
#
# Input: queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBaT"
# Output: [false,true,false,false,false]
# Explanation:
# "FooBarTest" can be generated like this "Fo" + "o" + "Ba" + "r" + "T" + "est".
#
#
# Note:
#
# 1 <= queries.length <= 100
# 1 <= queries[i].length <= 100
# 1 <= pattern.length <= 100
# All strings consists only of lower and upper case English letters.


import re


class Solution(object):
    def camelMatch2(self, queries, pattern):
        """
        :type queries: List[str]
        :type pattern: str
        :rtype: List[bool]
        """
        reg = '[a-z]*'
        for c in pattern:
            if c.isupper():
                reg += c
            if c.islower():
                reg += c
            reg += '[a-z]*'
        reg += '$'

        print reg
        res = []
        for q in queries:
            matchOjb = re.match(reg, q)
            if matchOjb:
                res.append(True)
            else:
                res.append(False)

        return res

    def camelMatch(self, queries, pattern):
        """
        :type queries: List[str]
        :type pattern: str
        :rtype: List[bool]
        """
        res = []
        for q in queries:
            s, p = 0, 0
            while s < len(q):
                if p < len(pattern) and q[s] == pattern[p]:
                    p, s = p + 1, s + 1

                elif q[s].islower():
                    s += 1
                elif q[s].isupper():
                    break
            res.append(p == len(pattern) and s == len(q))

        return res


if __name__ == '__main__':
    print Solution().camelMatch(["FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"], "FB")
    print Solution().camelMatch(
        ["aksvbjLiknuTzqon", "ksvjLimflkpnTzqn", "mmkasvjLiknTxzqn", "ksvjLiurknTzzqbn", "ksvsjLctikgnTzqn",
         "knzsvzjLiknTszqn"], "ksvjLiknTzqn")
    print Solution().camelMatch(["FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"], "FoBa")
    print Solution().camelMatch(["FooBar", "FooBarTest", "FootBall", "FrameBuffer", "ForceFeedBack"], "FoBaT")
