前端工程师的 LeetCode 之旅 -- 周赛 184

01

数组中的字符串匹配

题目描述【Easy】

给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词。请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词。

如果你可以删除 words[j] 最左侧和/或最右侧的若干字符得到 word[i] ,那么字符串 words[i] 就是 words[j] 的一个子字符串。

示例:

输入:words = ['mass','as','hero','superhero']

输出:['as','hero']

解释:'as' 是 'mass' 的子字符串,'hero' 是 'superhero' 的子字符串。

['hero','as'] 也是有效的答案。

对于字符串匹配问题,在 JavaScript 中可以利用 indexOf 方法快速判断子字符串。

在第二次遍历的过程中,一旦找到满足要求的字符串,利用 break 语句及时退出循环,避免不必要的时间消耗。

时间复杂度 O(n^2),空间复杂度 O(n)。

02

查询带键的排列

题目描述【Medium】

给你一个待查数组 queries ,数组中的元素为 1 到 m 之间的正整数。请你根据以下规则处理所有待查项 queries[i](从 i=0 到 i=queries.length-1):

一开始,排列 P=[1,2,3,...,m]。

对于当前的 i ,请你找出待查项 queries[i] 在排列 P 中的位置(下标从 0 开始),然后将其从原位置移动到排列 P 的起始位置(即下标为 0 处)。注意, queries[i] 在 P 中的位置就是 queries[i] 的查询结果。

请你以数组形式返回待查数组  queries 的查询结果。

示例:

输入:queries = [3,1,2,1], m = 5

输出:[2,1,2,1] 

解释:待查数组 queries 处理如下:

对于 i=0: queries[i]=3, P=[1,2,3,4,5], 3 在 P 中的位置是 2,接着我们把 3 移动到 P 的起始位置,得到 P=[3,1,2,4,5] 。

对于 i=1: queries[i]=1, P=[3,1,2,4,5], 1 在 P 中的位置是 1,接着我们把 1 移动到 P 的起始位置,得到 P=[1,3,2,4,5] 。 

对于 i=2: queries[i]=2, P=[1,3,2,4,5], 2 在 P 中的位置是 2,接着我们把 2 移动到 P 的起始位置,得到 P=[2,1,3,4,5] 。

对于 i=3: queries[i]=1, P=[2,1,3,4,5], 1 在 P 中的位置是 1,接着我们把 1 移动到 P 的起始位置,得到 P=[1,2,3,4,5] 。 

因此,返回的结果数组为 [2,1,2,1] 。

本道题主要考察数组的基本操作。

时间复杂度 O(n^2),空间复杂度 O(n)。

03

  HTML 实体解析器

题目描述【Medium】

「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。

HTML 里这些特殊字符和它们对应的字符实体包括:

双引号:字符实体为 " ,对应的字符是 ''。

单引号:字符实体为 ' ,对应的字符是 ' 。

与符号:字符实体为 & ,对应对的字符是 & 。

大于号:字符实体为 > ,对应的字符是 > 。

小于号:字符实体为 &lt; ,对应的字符是 < 。

斜线号:字符实体为 &frasl; ,对应的字符是 / 。

给你输入字符串 text ,请你实现一个 HTML 实体解析器,返回解析器解析后的结果。

示例:

输入:text = "&amp; is an HTML entity but &ambassador; is not."

输出:"& is an HTML entity but &ambassador; is not."

解释:解析器把字符实体 &amp; 用 & 替换

本道题主要考察字符串的匹配,这里可以采用 JavaScript 中的 replace 方法结合正则完成目标字符串的替换。

04

       给 N x 3 网格涂色的方案数

题目描述【Hard】

你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同)。

给你网格图的行数 n 。

请你返回给 grid 涂色的方案数。由于答案可能会非常大,请你返回答案对 10^9 + 7 取余的结果。

示例:

输入:n = 1

输出:12

解释:总共有 12 种可行的方法

由于是 N * 3 的网格,所以水平方向只有上述这 12 种情况,接下来要根据上述情况来推算下一层的涂色,也就是考虑垂直方向相邻格子颜色不同的情况。

aba 模式的下一级一共有 5 种情况。

abc 模式的下一级一共有 4 种情况。

到这里,可以看出:对于 N * 3 的网格,其涂色的方案数应该是由 (N - 1) * 3 网格中的 aba 和 abc 数量决定,所以本题可以采用动态规划来解决。

再仔细看上面两张图,可以得到 aba 和 abc 的状态转移方程:

  • aba(n) = aba(n - 1) * 3 + abc(n - 1) * 2

  • abc(n) = aba(n - 1) * 2 + abc(n - 1) * 2

时间复杂度 O(n),空间复杂度 O(1)。

05

往期精彩回顾

你点的每个赞,我都认真当成了喜欢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值