leetcode1023

 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个问题。

原文地址:https://www.cnblogs.com/asenyang/p/10665786.html