🌓

给定一组字符串和一个模式(pattern),返回字符串中所有匹配这个模式的对象。

这里的模式(pattern)描述字母如何重复,即如果模式匹配,那么将模式中的字母替换成映射的字母,就可以还原成目标字符串。

使用字符串映射,或者码表来解决这道题。

阅读全文 »

模棱两可的平面坐标。你需要从一个删除了逗号、空格和小数点的平面坐标中还原它的所有可能的坐标值。

For example, “(1, 3)” becomes s = “(13)” and “(2, 0.5)” becomes s = “(205)”.

结果坐标值不会有多余的前置 0,并且小数点后的数字不会以 0 结尾。还原后的坐标的两个值应该用逗号和一个空格隔开。

我们讨论用正则和回溯算法来解决这道题。

阅读全文 »

字符串问题。找出匹配子序列(Subsequences)的数量。

子序列(Subsequences)的定义:一个字符串中删除某些字符(也可以不删除字符)之后,字符出现的相对顺序没有被改变,则这个新的字符串称之为原字符串的子序列。

For example, “ace” is a subsequence of “abcde”.

我们用暴力法和桶来解决这道题。

阅读全文 »

这是一道求最合适路径的题目,根据提示可以应用图论中的 Dijkstra 算法。

Dijkstra‘s Algorithm 适用于求权重不为负数的加权图起点到终点的最优路径。

这道题的 input 是一个 n * n 的矩阵,可以将其视作所有元素都与其上下左右相互连接的一张无向图,每个顶点的数值表示到达这个顶点的边的权重,我们需要求的是从起点 (0, 0) 到终点 (n, n) 的最优路径。这道题要求我们计算的是这条路径上权重最大值,所以我们用一个变量来保持每一次选择后的权重最大值。

阅读全文 »

开锁游戏。你有一个圆盘锁,锁有 4 个转轮,每个转轮上有 0 ~ 9 共十个数字。

你可以自由转动每个转轮,每次转动一个转轮后它的值会 +1 或 -1,当你从 0 开始转动 -1 后为 9,反之亦然。

你会得到一个死锁列表 deadends,表示当你转动圆盘锁到这个值的时候游戏结束。你还会得到目标值 target,你需要在避免遇到死锁的情况下解开圆盘锁,返回操作圆盘锁的最少步骤数,或者返回 -1 表示在已知条件下无法解锁。

阅读全文 »

爬楼梯游戏。你在爬一段楼梯,你会得到一个 cost 数组记录爬到每一级台阶的消耗。

一旦你付出当前台阶的消耗,你可以选择往上爬一级或两级台阶。另外,你可以选择从第一级台阶或第二级台阶开始游戏。

求爬到顶部的最小消耗。这是一道 DP 应用的简单题目。

阅读全文 »

字典树题目。实现一个字典根据指定的前缀和后缀来定位单词,如果存在多个单词则返回最大的下标位置,如果不存在单词则返回 -1。

测试 case 中单词最大数量为 15000,查询次数最大为 15000,查询性能不够的话会遇到超时问题。

字符串索引问题是字典树(Trie)的应用场景,我们用字典树来解决这道题。

阅读全文 »

字符串问题。将给定的字符串中的大写字母转换为小写字母并返回。

很简单的一道题目,考察点在于实现的思路。通过 ASCII 码可以简单的解决这道题。

阅读全文 »

给定一个尺寸为 m x n 的二进制值的矩阵。定义元素的值为 1 表示土地,元素值为 0 表示海水。

陆地由四边邻接的土地组合而成,陆地的面积是接邻的土地的数量。

求矩阵中的陆地的最大面积,如果不存在陆地则返回 0。

阅读全文 »