1662. 检查两个字符串数组是否相等
# 1662. 检查两个字符串数组是否相等
给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。
数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。
示例 1:
输入:word1 = ["ab", "c"], word2 = ["a", "bc"]输出:true解释:word1 表示的字符串为 "ab" + "c" -> "abc"word2 表示的字符串为 "a" + "bc" -> "abc"两个字符串相同,返回 true
示例 2:
输入:word1 = ["a", "cb"], word2 = ["ab", "c"]输出:false
示例 3:
输入:word1 = ["abc", ...
481. 神奇字符串
# 481. 神奇字符串
神奇字符串 s 仅由 ‘1’ 和 ‘2’ 组成,并需要遵守下面的规则:
神奇字符串 s 的神奇之处在于,串联字符串中 ‘1’ 和 ‘2’ 的连续出现次数可以生成该字符串。
s 的前几个元素是 s = “1221121221221121122……” 。如果将 s 中连续的若干 1 和 2 进行分组,可以得到 “1 22 11 2 1 22 1 22 11 2 11 22 …” 。每组中 1 或者 2 的出现次数分别是 “1 2 2 1 1 2 1 2 2 1 2 2 …” 。上面的出现次数正是 s 自身。
给你一个整数 n ,返回在神奇字符串 s 的前 n 个数字中 1 的数目。
示例 1:
输入:n = 6输出:3解释:神奇字符串 s 的前 6 个元素是 “122112”,它包含三个 1,因此返回 3 。
示例 2:
输入:n = 1输出:1
提示:
$1 <= n <= 10^5$
# 题解
class Solution {public: int magicalString(int n) { i ...
784. 字母大小写全排列
# 784. 字母大小写全排列
给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。
返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
示例 1:
输入:s = "a1b2"输出:["a1b2", "a1B2", "A1b2", "A1B2"]
示例 2:
输入: s = "3z4"输出: ["3z4","3Z4"]
提示:
1 <= s.length <= 12
s 由小写英文字母、大写英文字母和数字组成
# 题解
class Solution {public: vector<string> letterCasePermutation(string s) { vector<string> ans; queue<string> qu; qu.emplace(& ...
1773. 统计匹配检索规则的物品数量
# 1773. 统计匹配检索规则的物品数量
给你一个数组 items ,其中 items [i] = [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。
另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。
如果第 i 件物品能满足下述条件之一,则认为该物品与给定的检索规则 匹配 :
ruleKey == “type” 且 ruleValue == $type_i$ 。
ruleKey == “color” 且 ruleValue == $color_i$ 。
ruleKey == “name” 且 ruleValue == $name_i$ 。
统计并返回 匹配检索规则的物品数量 。
示例 1:
输入:items = [["phone","blue","pixel"],["computer","silver","lenovo"],["phone","gold&quo ...
907. 子数组的最小值之和
# 907. 子数组的最小值之和
给定一个整数数组 arr,找到 min (b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。
由于答案可能很大,因此 返回答案模 $10^9 + 7$ 。
示例 1:
输入:arr = [3,1,2,4]输出:17解释:子数组为 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。 最小值为 3,1,2,4,1,1,2,1,1,1,和为 17。
示例 2:
输入:arr = [11,81,94,43,3]输出:444
提示:
1 <= arr.length <= $3 * 10^4$
1 <= arr[i] <= $3 * 10^4$
# 题解
class Solution {public: int sumSubarrayMins(vector<int>& arr) { int n = arr.size(); long long ans = 0; long ...
1822. 数组元素积的符号
# 1822. 数组元素积的符号
已知函数 signFunc (x) 将会根据 x 的正负返回特定值:
如果 x 是正数,返回 1 。
如果 x 是负数,返回 -1 。
如果 x 是等于 0 ,返回 0 。
给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。
返回 signFunc (product) 。
示例 1:
输入:nums = [-1,-2,-3,-4,3,2,1]输出:1解释:数组中所有值的乘积是 144 ,且 signFunc(144) = 1
示例 2:
输入:nums = [1,5,0,2,-3]输出:0解释:数组中所有值的乘积是 0 ,且 signFunc(0) = 0
示例 3:
输入:nums = [-1,1,-1,1,-1]输出:-1解释:数组中所有值的乘积是 -1 ,且 signFunc(-1) = -1
提示:
1 <= nums.length <= 1000
-100 <= nums[i] <= 100
# 题解
class Solution {public: int i ...
862. 和至少为 K 的最短子数组
# 862. 和至少为 K 的最短子数组
给你一个整数数组 nums 和一个整数 k ,找出 nums 中和至少为 k 的 最短非空子数组 ,并返回该子数组的长度。如果不存在这样的 子数组 ,返回 -1 。
子数组 是数组中 连续 的一部分。
示例 1:
输入:nums = [1], k = 1输出:1
示例 2:
输入:nums = [1,2], k = 4输出:-1
示例 3:
输入:nums = [2,-1,2], k = 3输出:3
提示:
1 <= nums.length <= $10^5$
−105-10^5−105 <= nums[i] <= $10^5$
1 <= k <= $10^9$
# 题解
class Solution {public: int shortestSubarray(vector<int>& nums, int k) { int n = nums.size(); vector<long> preSumArr(n + 1); ...
934. 最短的桥
# 934. 最短的桥
给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域。
岛 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其他 1 相连。grid 中 恰好存在两座岛 。
你可以将任意数量的 0 变为 1 ,以使两座岛连接起来,变成 一座岛 。
返回必须翻转的 0 的最小数目。
示例 1:
输入:grid = [[0,1],[1,0]]输出:1
示例 2:
输入:grid = [[0,1,0],[0,0,0],[0,0,1]]输出:2
示例 3:
输入:grid = [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]]输出:1
提示:
n == grid.length == grid[i].length
2 <= n <= 100
grid [i][j] 为 0 或 1
grid 中恰有两个岛
# 题解
class Solution {public: int shortestBridge(vector<vector<in ...
915. 分割数组
# 915. 分割数组
给定一个数组 nums ,将其划分为两个连续子数组 left 和 right, 使得:
left 中的每个元素都小于或等于 right 中的每个元素。
left 和 right 都是非空的。
left 的长度要尽可能小。
在完成这样的分组后返回 left 的 长度 。
用例可以保证存在这样的划分方法。
示例 1:
输入:nums = [5,0,3,8,6]输出:3解释:left = [5,0,3],right = [8,6]
示例 2:
输入:nums = [1,1,1,0,6,12]输出:4解释:left = [1,1,1,0],right = [6,12]
提示:
2 <= nums.length <= $10^5$
0 <= nums[i] <= $10^6$
可以保证至少有一种方法能够按题目所描述的那样对 nums 进行划分。
# 题解
class Solution {public: int partitionDisjoint(vector<int>& nums) { ...
1768. 交替合并字符串
# 1768. 交替合并字符串
给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。
返回 合并后的字符串 。
示例 1:
输入:word1 = "abc", word2 = "pqr"输出:"apbqcr"解释:字符串合并情况如下所示:word1: a b cword2: p q r合并后: a p b q c r
示例 2:
输入:word1 = "ab", word2 = "pqrs"输出:"apbqrs"解释:注意,word2 比 word1 长,"rs" 需要追加到合并后字符串的末尾。word1: a b word2: p q r s合并后: a p b q r s
示例 3:
输入:word1 = "abcd", word2 = &q ...