Skip to content

Commit b9bb197

Browse files
author
lucifer
committed
feat: #1023
1 parent a89493e commit b9bb197

File tree

2 files changed

+161
-39
lines changed

2 files changed

+161
-39
lines changed

README.md

+29-39
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
![leetcode.jpeg](./assets/leetcode.jpeg)
1717

1818
这个是我写的[纪念项目 Star 突破 1W 的一个短文](./thanksGiving.md), 记录了项目的"兴起"之路, 大家有兴趣可以看一下,
19-
如果对这个项目感兴趣,请**点击一下Star**, 项目会**持续更新**,感谢大家的支持。
19+
如果对这个项目感兴趣,请**点击一下 Star**, 项目会**持续更新**,感谢大家的支持。
2020

2121
## 介绍
2222

@@ -30,34 +30,34 @@ leetcode 题解,记录自己的 leetcode 解题之路。
3030

3131
- 第三部分是 anki 卡片, 将 leetcode 题目按照一定的方式记录在 anki 中,方便大家记忆。
3232

33-
- 第四部分是每日一题,每日一题是在交流群(包括微信和qq)里进行的一种活动,大家一起 解一道题,这样讨论问题更加集中,会得到更多的反馈。而且 这些题目可以被记录下来,日后会进行筛选添加到仓库的题解模块。
33+
- 第四部分是每日一题,每日一题是在交流群(包括微信和 qq)里进行的一种活动,大家一起 解一道题,这样讨论问题更加集中,会得到更多的反馈。而且 这些题目可以被记录下来,日后会进行筛选添加到仓库的题解模块。
3434

3535
- 第五部分是计划, 这里会记录将来要加入到以上三个部分内容
3636

3737
> 只有熟练掌握基础的数据结构与算法,才能对复杂问题迎刃有余。
3838
3939
## 关于我
4040

41-
擅长前端工程化,前端性能优化,前端标准化等,做过.net, 搞过Java,现在是一名前端工程师,我的个人博客:https://lucifer.ren/blog/
41+
擅长前端工程化,前端性能优化,前端标准化等,做过.net, 搞过 Java,现在是一名前端工程师,我的个人博客:https://lucifer.ren/blog/
4242

4343
我经常会在开源社区进行一些输出和分享,比较受欢迎的有[宇宙最强的前端面试指南](https://github.com/azl397985856/fe-interview)
44-
[我的第一本小书](https://github.com/azl397985856/automate-everything)。目前本人正在写一本关于《leetcode题解》的实体书,因此可能更新会比较慢,如果有人想要做些贡献或者合作的也可以直接用下面的邮箱联系我。
44+
[我的第一本小书](https://github.com/azl397985856/automate-everything)。目前本人正在写一本关于《leetcode 题解》的实体书,因此可能更新会比较慢,如果有人想要做些贡献或者合作的也可以直接用下面的邮箱联系我。
4545

4646
另外如果大家需要内推的可以找我,我这里有包括阿里,腾讯,头条,网易等很多公司的朋友。有需要可以直接群里联系我,或者发送到我的个人邮箱 [[email protected]]
4747

4848
## 食用指南
4949

5050
- 对于最近添加的部分, 后面会有 🆕 标注
5151
- 对于最近更新的部分, 后面会有 🖊 标注
52-
- 将来会在这里更新anki卡片
53-
- 这里有一份leetcode官方账号在知乎上给出的一个《互联网公司最常见的面试算法题有哪些?》的答案,我这里尽量去覆盖回答中的题目和知识点
54-
原文地址: https://www.zhihu.com/question/24964987/answer/586425979
52+
- 将来会在这里更新 anki 卡片
53+
- 这里有一份 leetcode 官方账号在知乎上给出的一个《互联网公司最常见的面试算法题有哪些?》的答案,我这里尽量去覆盖回答中的题目和知识点
54+
原文地址: https://www.zhihu.com/question/24964987/answer/586425979
5555

5656
- 这里有一张互联网公司面试中经常考察的问题类型总结的思维导图,我们可以结合图片中的信息分析一下。
5757

5858
![leetcode-zhihu](./assets//leetcode-zhihu.jpg)
5959

60-
(图片来自leetcode)
60+
(图片来自 leetcode)
6161

6262
其中算法,主要是以下几种:
6363

@@ -76,39 +76,29 @@ leetcode 题解,记录自己的 leetcode 解题之路。
7676
- 树与图:最近公共祖先、并查集
7777
- 字符串:前缀树(字典树) / 后缀树
7878

79-
80-
81-
8279
## 精彩预告
8380

84-
8581
[0042.trapping-rain-water](./problems/42.trapping-rain-water.md):
8682

8783
![0042.trapping-rain-water](./assets/problems/42.trapping-rain-water-1.png)
8884

89-
9085
[0547.friend-circles](./problems/547.friend-circles-en.md):
9186

9287
<img width="600" src="./assets/problems/547.friend-circle-bfs.png">
9388

94-
95-
9689
[backtrack problems](./problems/90.subsets-ii.md):
9790

9891
<img width="600" src="./assets/problems/backtrack.png">
9992

100-
101-
10293
[0198.house-robber](./problems/198.house-robber.md):
10394

10495
<img width="600" src="./assets/problems/198.house-robber.png">
10596

106-
10797
[0454.4-sum-ii](./problems/454.4-sum-ii.md):
10898

10999
<img width="600" src="./assets/problems/454.4-sum-ii.png">
110100

111-
## Top题目进度
101+
## Top 题目进度
112102

113103
- [Top 100 Liked Questions](https://leetcode.com/problemset/top-100-liked-questions/) (79 / 100)
114104

@@ -151,7 +141,6 @@ leetcode 题解,记录自己的 leetcode 解题之路。
151141
- [0371.sum-of-two-integers](./problems/371.sum-of-two-integers.md)
152142
- [0575.distribute-candies](./problems/575.distribute-candies.md)
153143

154-
155144
#### 中等难度
156145

157146
- [0002. Add Two Numbers](./problems/2.addTwoNumbers.md)
@@ -163,17 +152,17 @@ leetcode 题解,记录自己的 leetcode 解题之路。
163152
- [0024. Swap Nodes In Pairs](./problems/24.swapNodesInPairs.md)
164153
- [0029.divide-two-integers](./problems/29.divide-two-integers.md)
165154
- [0031.next-permutation](./problems/31.next-permutation.md)
166-
- [0033.search-in-rotated-sorted-array](./problems/33.search-in-rotated-sorted-array.md)
155+
- [0033.search-in-rotated-sorted-array](./problems/33.search-in-rotated-sorted-array.md)
167156
- [0039.combination-sum](./problems/39.combination-sum.md)
168157
- [0040.combination-sum-ii](./problems/40.combination-sum-ii.md)
169158
- [0046.permutations](./problems/46.permutations.md)
170159
- [0047.permutations-ii](./problems/47.permutations-ii.md)
171160
- [0048.rotate-image](./problems/48.rotate-image.md)
172-
- [0049.group-anagrams](./problems/49.group-anagrams.md)
161+
- [0049.group-anagrams](./problems/49.group-anagrams.md)
173162
- [0055.jump-game](./problems/55.jump-game.md)
174163
- [0056.merge-intervals](./problems/56.merge-intervals.md)
175-
- [0062.unique-paths](./problems/62.unique-paths.md )
176-
- [0073.set-matrix-zeroes](./problems/73.set-matrix-zeroes.md )
164+
- [0062.unique-paths](./problems/62.unique-paths.md)
165+
- [0073.set-matrix-zeroes](./problems/73.set-matrix-zeroes.md)
177166
- [0075.sort-colors](./problems/75.sort-colors.md)
178167
- [0078.subsets](./problems/78.subsets.md)
179168
- [0079.word-search](./problems/79.word-search-en.md)
@@ -182,36 +171,36 @@ leetcode 题解,记录自己的 leetcode 解题之路。
182171
- [0091.decode-ways](./problems/91.decode-ways.md)
183172
- [0092.reverse-linked-list-ii](./problems/92.reverse-linked-list-ii.md)
184173
- [0094.binary-tree-inorder-traversal](./problems/94.binary-tree-inorder-traversal.md)
185-
- [0098.validate-binary-search-tree](./problems/98.validate-binary-search-tree.md)
174+
- [0098.validate-binary-search-tree](./problems/98.validate-binary-search-tree.md)
186175
- [0102.binary-tree-level-order-traversal](./problems/102.binary-tree-level-order-traversal.md)
187176
- [0103.binary-tree-zigzag-level-order-traversal](./problems/103.binary-tree-zigzag-level-order-traversal.md)
188177
- [0113.path-sum-ii](./problems/113.path-sum-ii.md)
189-
- [0129.sum-root-to-leaf-numbers](./problems/129.sum-root-to-leaf-numbers.md)
190-
- [0130.surrounded-regions](./problems/130.surrounded-regions.md)
178+
- [0129.sum-root-to-leaf-numbers](./problems/129.sum-root-to-leaf-numbers.md)
179+
- [0130.surrounded-regions](./problems/130.surrounded-regions.md)
191180
- [0131.palindrome-partitioning](./problems/131.palindrome-partitioning.md)
192181
- [0139.word-break](./problems/139.word-break.md)
193182
- [0144.binary-tree-preorder-traversal](./problems/144.binary-tree-preorder-traversal.md)
194183
- [0150.evaluate-reverse-polish-notation](./problems/150.evaluate-reverse-polish-notation.md)
195184
- [0152.maximum-product-subarray](./problems/152.maximum-product-subarray.md)
196185
- [0199.binary-tree-right-side-view](./problems/199.binary-tree-right-side-view.md)
197-
- [0200.number-of-islands](./problems/200.number-of-islands.md) 🆕
186+
- [0200.number-of-islands](./problems/200.number-of-islands.md) 🆕
198187
- [0201.bitwise-and-of-numbers-range](./problems/201.bitwise-and-of-numbers-range.md)
199188
- [0208.implement-trie-prefix-tree](./problems/208.implement-trie-prefix-tree.md)
200189
- [0209.minimum-size-subarray-sum](./problems/209.minimum-size-subarray-sum.md)
201-
- [0215.kth-largest-element-in-an-array](./problems/215.kth-largest-element-in-an-array.md) 🆕
202-
- [0221.maximal-square](./problems/221.maximal-square.md)
203-
- [0229.majority-element-ii](./problems/229.majority-element-ii.md) 🆕
190+
- [0215.kth-largest-element-in-an-array](./problems/215.kth-largest-element-in-an-array.md) 🆕
191+
- [0221.maximal-square](./problems/221.maximal-square.md)
192+
- [0229.majority-element-ii](./problems/229.majority-element-ii.md) 🆕
204193
- [0230.kth-smallest-element-in-a-bst](./problems/230.kth-smallest-element-in-a-bst.md)
205194
- [0236.lowest-common-ancestor-of-a-binary-tree](./problems/236.lowest-common-ancestor-of-a-binary-tree.md)
206195
- [0238.product-of-array-except-self](./problems/238.product-of-array-except-self.md)
207196
- [0240.search-a-2-d-matrix-ii](./problems/240.search-a-2-d-matrix-ii.md)
208197
- [0279.perfect-squares](./problems/279.perfect-squares.md)
209-
- [0309.best-time-to-buy-and-sell-stock-with-cooldown](./problems/309.best-time-to-buy-and-sell-stock-with-cooldown.md)
198+
- [0309.best-time-to-buy-and-sell-stock-with-cooldown](./problems/309.best-time-to-buy-and-sell-stock-with-cooldown.md)
210199
- [0322.coin-change](./problems/322.coin-change.md)
211200
- [0328.odd-even-linked-list](./problems/328.odd-even-linked-list.md)
212201
- [0334.increasing-triplet-subsequence](./problems/334.increasing-triplet-subsequence.md)
213202
- [0365.water-and-jug-problem](./problems/365.water-and-jug-problem.md)
214-
- [0378.kth-smallest-element-in-a-sorted-matrix](./problems/378.kth-smallest-element-in-a-sorted-matrix.md)
203+
- [0378.kth-smallest-element-in-a-sorted-matrix](./problems/378.kth-smallest-element-in-a-sorted-matrix.md)
215204
- [0416.partition-equal-subset-sum](./problems/416.partition-equal-subset-sum.md)
216205
- [0445.add-two-numbers-ii](./problems/445.add-two-numbers-ii.md)
217206
- [0454.4-sum-ii](./problems/454.4-sum-ii.md)
@@ -226,6 +215,7 @@ leetcode 题解,记录自己的 leetcode 解题之路。
226215
- [0887.super-egg-drop](./problems/887.super-egg-drop.md)
227216
- [0900.rle-iterator](./problems/900.rle-iterator.md)
228217
- [0912.sort-an-array](./problems/912.sort-an-array.md) 🆕
218+
- [1023.camelcase-matching](./problems/1023.camelcase-matching.md) 🆕
229219
- [1031.maximum-sum-of-two-non-overlapping-subarrays](./problems/1031.maximum-sum-of-two-non-overlapping-subarrays.md)
230220
- [1186.maximum-subarray-sum-with-one-deletion](./problems/1186.maximum-subarray-sum-with-one-deletion.md) 🆕
231221
- [1218.longest-arithmetic-subsequence-of-given-difference.md](./problems/1218.longest-arithmetic-subsequence-of-given-difference.md) 🆕
@@ -259,15 +249,15 @@ leetcode 题解,记录自己的 leetcode 解题之路。
259249

260250
### anki 卡片
261251

262-
Anki主要分为两个部分:一部分是关键点到题目的映射,另一部分是题目到思路,关键点,代码的映射。
252+
Anki 主要分为两个部分:一部分是关键点到题目的映射,另一部分是题目到思路,关键点,代码的映射。
263253

264254
全部卡片都在[anki-card](./assets/anki/leetcode.apkg)
265255

266256
使用方法:
267257

268-
anki - 文件 - 导入 - 下拉格式选择“打包的 anki集合”,然后选中你下载好的文件,确定即可。
258+
anki - 文件 - 导入 - 下拉格式选择“打包的 anki 集合”,然后选中你下载好的文件,确定即可。
269259

270-
更多关于anki使用方法的请查看[anki官网](https://apps.ankiweb.net/)
260+
更多关于 anki 使用方法的请查看[anki 官网](https://apps.ankiweb.net/)
271261

272262
目前已更新卡片一览(仅列举正面):
273263

@@ -283,7 +273,7 @@ anki - 文件 - 导入 - 下拉格式选择“打包的 anki集合”,然后
283273
284274
### 每日一题
285275

286-
每日一题是在交流群(包括微信和 qq)里通过issues来进行的一种活动,大家一起 解一道题,这样讨论问题更加集中,会得到更多的反馈。而且 这些题目可以被记录下来,日后会进行筛选添加到仓库的题解模块。
276+
每日一题是在交流群(包括微信和 qq)里通过 issues 来进行的一种活动,大家一起 解一道题,这样讨论问题更加集中,会得到更多的反馈。而且 这些题目可以被记录下来,日后会进行筛选添加到仓库的题解模块。
287277

288278
- [每日一题汇总](./daily/)
289279

@@ -309,19 +299,19 @@ anki - 文件 - 导入 - 下拉格式选择“打包的 anki集合”,然后
309299

310300
另外你可以回复大前端进大前端微信交流群, 回复 leetcode 拉你进 leetcode 微信群,如果想加入 qq 群,请回复 qq。
311301

312-
313302
<img width="300" src="./assets/gongzhonghao.jpeg">
314303

315304
## 捐赠
316305

317306
[点击查看完整的捐赠列表](./donation.md)
318307

319308
### 微信
309+
320310
<img width="300" src="./assets/donate-weixin.jpg">
321311

322312
### 支付宝
323-
<img width="300" src="./assets/donate-zfb.jpg">
324313

314+
<img width="300" src="./assets/donate-zfb.jpg">
325315

326316
## 贡献
327317

problems/1023.camelcase-matching.md

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
## 题目地址
2+
3+
https://leetcode-cn.com/problems/camelcase-matching/
4+
5+
## 题目描述
6+
7+
```
8+
如果我们可以将小写字母插入模式串 pattern 得到待查询项 query,那么待查询项与给定模式串匹配。(我们可以在任何位置插入每个字符,也可以插入 0 个字符。)
9+
10+
给定待查询列表 queries,和模式串 pattern,返回由布尔值组成的答案列表 answer。只有在待查项 queries[i] 与模式串 pattern 匹配时, answer[i] 才为 true,否则为 false。
11+
12+
 
13+
14+
示例 1:
15+
16+
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FB"
17+
输出:[true,false,true,true,false]
18+
示例:
19+
"FooBar" 可以这样生成:"F" + "oo" + "B" + "ar"。
20+
"FootBall" 可以这样生成:"F" + "oot" + "B" + "all".
21+
"FrameBuffer" 可以这样生成:"F" + "rame" + "B" + "uffer".
22+
示例 2:
23+
24+
输入:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBa"
25+
输出:[true,false,true,false,false]
26+
解释:
27+
"FooBar" 可以这样生成:"Fo" + "o" + "Ba" + "r".
28+
"FootBall" 可以这样生成:"Fo" + "ot" + "Ba" + "ll".
29+
示例 3:
30+
31+
输出:queries = ["FooBar","FooBarTest","FootBall","FrameBuffer","ForceFeedBack"], pattern = "FoBaT"
32+
输入:[false,true,false,false,false]
33+
解释:
34+
"FooBarTest" 可以这样生成:"Fo" + "o" + "Ba" + "r" + "T" + "est".
35+
 
36+
37+
提示:
38+
39+
1 <= queries.length <= 100
40+
1 <= queries[i].length <= 100
41+
1 <= pattern.length <= 100
42+
所有字符串都仅由大写和小写英文字母组成。
43+
44+
```
45+
46+
## 思路
47+
48+
这道题是一道典型的双指针题目。不过这里的双指针并不是指向同一个数组或者字符串,而是指向多个,这道题是指向两个,分别是 query 和 pattern,这种题目非常常见,能够识别和掌握这种题目的解题模板非常重要。对 queries 的每一项我们的逻辑是一样的,这里就以其中一项为例进行讲解。
49+
50+
以 query 为 FooBar,pattern 为 FB 为例。
51+
52+
首先我们来简化一下问题,假如我们没有`可以在任何位置插入每个字符,也可以插入 0 个字符。`这个规则。我们的问题会比较简单,这个时候我们的算法是什么样的呢?一起来看下:
53+
54+
1. 首先我们建立两个指针 i 和 j 分别指向 query 和 pattern 的首字母。
55+
2. 当 i 和 j 指向的字母相同的时候,我们同时向后移动两个指针一个单位。
56+
3. 当 i 和 j 指向的字母不同的时候,我们直接返回 False
57+
58+
假如我们要找到的不是子串,而是子序列怎么办?我们不妨假设判断 pattern 是否是 query 的子序列。 其实 LeetCode 实际上也有这样的题目,我们来看下:
59+
60+
1. 首先我们建立两个指针 i 和 j 分别指向 query 和 pattern 的首字母。
61+
2. 当 i 和 j 指向的字母相同的时候,我们同时向后移动两个指针一个单位。
62+
3. 当 i 和 j 指向的字母不同的时候,我们移动 i 指针。
63+
4. 当 i 超出 query 范围的时候,我们只需要判断 pattern 是否达到了终点即可。当然我们也可以提前退出。
64+
65+
我们直接参考下 LeetCode [392. 判断子序列](https://leetcode-cn.com/problems/is-subsequence/)
66+
67+
代码:
68+
69+
> 给定字符串 s 和 t ,判断 s 是否为 t 的子序列
70+
71+
```python
72+
class Solution:
73+
def isSubsequence(self, s: str, t: str) -> bool:
74+
i = 0
75+
j = 0
76+
while j < len(t):
77+
if i < len(s) and s[i] == t[j]:
78+
i += 1
79+
j += 1
80+
else:
81+
j += 1
82+
if i >= len (s):
83+
return True
84+
return i == len(s)
85+
```
86+
87+
然后我们加上`可以在任何位置插入每个字符,也可以插入 0 个字符。`这个规则。来看下有什么不同:
88+
89+
1. 首先我们建立两个指针 i 和 j 分别指向 query 和 pattern 的首字母。
90+
2. 当 i 和 j 指向的字母相同的时候,我们同时向后移动两个指针一个单位。
91+
3. 当 i 和 j 指向的字母不同的时候,我们继续判断 i 指向的元素是否是小写。
92+
4. 如果是小写我们只把 i 向后移动一个单位。
93+
5. 如果不是小写我们直接返回 False
94+
95+
## 关键点解析
96+
97+
- 双指针
98+
- 字符串匹配
99+
- 子序列
100+
- 子串
101+
102+
## 代码
103+
104+
```python
105+
class Solution:
106+
def camelMatch(self, queries: List[str], pattern: str) -> List[bool]:
107+
res = []
108+
for query in queries:
109+
i = 0
110+
j = 0
111+
while i < len(query):
112+
if j < len(pattern) and query[i] == pattern[j]:
113+
i += 1
114+
j += 1
115+
elif query[i].islower():
116+
i += 1
117+
else:
118+
break
119+
if i == len(query) and j == len(pattern):
120+
res.append(True)
121+
else:
122+
res.append(False)
123+
return res
124+
```
125+
126+
## 扩展
127+
128+
这是一个符合直觉的解法,但是却不是一个很优秀的解法,那么你有想到什么优秀的解法么?
129+
130+
## 参考
131+
132+
- [392. 判断子序列](https://leetcode-cn.com/problems/is-subsequence/)

0 commit comments

Comments
 (0)