1 class Solution(object): 2 def getGroup(self,que): 3 group = list() 4 temp = '' 5 for i in range(len(que)): 6 cur = que[i] 7 if cur.isupper(): 8 group.append(temp) 9 temp = '' 10 temp += cur 11 if len(group)>0 and len(group[0])==0: 12 group.pop(0) 13 group.append(temp) 14 return group 15 16 def camelMatch(self, queries: 'List[str]', pattern: str) -> 'List[bool]': 17 patgroup = list() 18 temp = '' 19 for i in range(len(pattern)): 20 cur = pattern[i] 21 if cur.isupper(): 22 patgroup.append(temp) 23 temp = '' 24 temp += cur 25 patgroup.append(temp) 26 if len(patgroup)>0 and len(patgroup[0])==0: 27 patgroup.pop(0) 28 grouplen = len(patgroup) 29 30 resultli = list() 31 for i in range(len(queries)): 32 cond = True 33 que = queries[i] 34 cg = self.getGroup(que) 35 if (len(cg) == grouplen + 1) and cg[0].islower(): 36 cg.pop(0) 37 38 if len(cg) != grouplen: 39 resultli.append(False) 40 continue 41 else: 42 for j in range(grouplen): 43 str1 = cg[j] 44 str2 = patgroup[j] 45 len1 = len(str1) 46 len2 = len(str2) 47 48 m = 0 49 n = 0 50 while m < len1 and n < len2: 51 if str1[m] == str2[n]: 52 m += 1 53 n += 1 54 else: 55 m += 1 56 if n < len2: 57 cond = False 58 break 59 if not cond: 60 resultli.append(cond) 61 continue 62 resultli.append(cond) 63 64 return resultli
这道题的题目描述不清楚,所以做的时候会中陷阱。有2个问题没有说清楚:
1子字符串是否必须要求连续,也就是字符串Babc与模式Bac是否匹配。本题中的要求是不要求连续,也就是Babc满足Bac模式。
2骆驼模式第一组小写不影响模式,也就是说字符串uBa与模式Ba是匹配的,即使模式没有第一组小写的u字符。
我觉得这些应该在题目描述中和example中明确出来,但是却没有。
明确了以上的问题,解决思路就比较容易确定了。
主要思想是,捕捉字符所具有的模式,将模式分组。然后每一个组进行匹配。主要的比较逻辑是在50~60行部分。主要解决的是上面第1个问题。