Leetcode-第156场周赛
5205.独一无二的出现次数
给你一个整数数组 arr
,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true
;否则返回 false
。
示例 1:
1 | 输入:arr = [1,2,2,1,1,3] |
示例 2:
1 | 输入:arr = [1,2] |
示例 3:
1 | 输入:arr = [-3,0,1,-3,1,1,1,-3,10,0] |
提示:
1 <= arr.length <= 1000
-1000 <= arr[i] <= 1000
解法1:map+set
map存各数出现的次数,set看次数有没有重复的
1 | class Solution { |
5207.尽可能使字符串相等
给你两个长度相同的字符串,s
和 t
。
将 s
中的第 i
个字符变到 t
中的第 i
个字符需要 |s[i] - t[i]|
的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。
用于变更字符串的最大预算是 maxCost
。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。
如果你可以将 s
的子字符串转化为它在 t
中对应的子字符串,则返回可以转化的最大长度。
如果 s
中没有子字符串可以转化成 t
中对应的子字符串,则返回 0
。
示例 1:
1 | 输入:s = "abcd", t = "bcdf", cost = 3 |
示例 2:
1 | 输入:s = "abcd", t = "cdef", cost = 3 |
示例 3:
1 | 输入:s = "abcd", t = "acde", cost = 0 |
提示:
1 <= s.length, t.length <= 10^5
0 <= maxCost <= 10^6
s
和t
都只含小写英文字母。
解法1:滑动窗口
这题做的时候卡死在,单个开销大于总开销部分了,
1 | class Solution { |
5206.删除字符串中的所有相邻重复项 II
给你一个字符串 s
,「k
倍重复项删除操作」将会从 s
中选择 k
个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。
你需要对 s
重复进行无限次这样的删除操作,直到无法继续为止。
在执行完所有删除操作后,返回最终得到的字符串。
本题答案保证唯一。
示例 1:
1 | 输入:s = "abcd", k = 2 |
示例 2:
1 | 输入:s = "deeedbbcccbdaa", k = 3 |
示例 3:
1 | 输入:s = "pbbcggttciiippooaais", k = 2 |
提示:
1 <= s.length <= 10^5
2 <= k <= 10^4
s
中只含有小写英文字母。
解法1:栈
理解好题意,理解好题意。一开始以为只能把正好连续为k个元素删除,正确要求是若连续k个元素相同就把这k个删除。
用栈,记录每个的字符和位于当前连续的第几个。
遍历完后出栈放入res中,颠倒res便得到了结果
1 | class Solution |
5208.穿过迷宫的最少移动次数
你还记得那条风靡全球的贪吃蛇吗?
我们在一个 n*n
的网格上构建了新的迷宫地图,蛇的长度为 2,也就是说它会占去两个单元格。蛇会从左上角((0, 0)
和 (0, 1)
)开始移动。我们用 0
表示空单元格,用 1 表示障碍物。蛇需要移动到迷宫的右下角((n-1, n-2)
和 (n-1, n-1)
)。
每次移动,蛇可以这样走:
- 如果没有障碍,则向右移动一个单元格。并仍然保持身体的水平/竖直状态。
- 如果没有障碍,则向下移动一个单元格。并仍然保持身体的水平/竖直状态。
- 如果它处于水平状态并且其下面的两个单元都是空的,就顺时针旋转 90 度。蛇从(
(r, c)
、(r, c+1)
)移动到 ((r, c)
、(r+1, c)
)。 - 如果它处于竖直状态并且其右面的两个单元都是空的,就逆时针旋转 90 度。蛇从(
(r, c)
、(r+1, c)
)移动到((r, c)
、(r, c+1)
)。
返回蛇抵达目的地所需的最少移动次数。
如果无法到达目的地,请返回 -1
。
示例 1:
1 | 输入:grid = [[0,0,0,0,0,1], |
示例 2:
1 | 输入:grid = [[0,0,1,1,1,1], |
提示:
2 <= n <= 100
0 <= grid[i][j] <= 1
- 蛇保证从空单元格开始出发。
解法1:BFS
注意:这个蛇跟贪吃蛇的移动不太一样,仔细阅读题干。考虑各个情况采用BFS
三维数组记录走过的蛇头位置和当前横状态还是竖状态
二维数组记录当前蛇头和蛇尾位置。
1 | class Solution { |