将字符串中的元音字母排序
将字符串中的元音字母排序
给你一个下标从 0 开始的字符串 s ,将 s 中的元素重新 排列 得到新的字符串 t ,它满足:所有辅音字母都在原来的位置上。更正式的,如果满足 0 <= i < s.length 的下标 i 处的 s[i] 是个辅音字母,那么 t[i] = s[i] 。元音字母都必须以他们的 ASCII 值按 非递减 顺序排列。更正式的,对于满足 0 <= i < j < s.length 的下标 i 和 j ,如果 s[i] 和 s[j] 都是元音字母,那么 t[i] 的 ASCII 值不能大于 t[j] 的 ASCII 值。请你返回结果字母串。元音字母为 ‘a’ ,’e’ ,’i’ ,’o’ 和 ‘u’ ,它们可能是小写字母也可能是大写字母,辅音字母是除了这 5 个字母以外的所有字母。
输入:s = “lEetcOde”
输出:”lEOtcede”解释:’E’ ,’O’ 和 ‘e’ 是 s 中的元音字母,’l’ ,’t’ ,’c’ 和 ‘d’ 是所有的辅音。将元音字母按照 ASCII 值排序,辅音字母留在原地。
1234567891 ...
检查一个字符串是否可以打破另一个字符串
检查一个字符串是否可以打破另一个字符串
给你两个字符串 s1 和 s2 ,它们长度相等,请你检查是否存在一个 s1 的排列可以打破 s2 的一个排列,或者是否存在一个 s2 的排列可以打破 s1 的一个排列。字符串 x 可以打破字符串 y (两者长度都为 n )需满足对于所有 i(在 0 到 n - 1 之间)都有 x[i] >= y[i](字典序意义下的顺序)。
输入:s1 = “abc”, s2 = “xya”
输出:true解释:”ayx” 是 s2=”xya” 的一个排列,”abc” 是字符串 s1=”abc” 的一个排列,且 “ayx” 可以打破 “abc” 。
输入:s1 = “abe”, s2 = “acd”
输出:false解释:s1=”abe” 的所有排列包括:”abe”,”aeb”,”bae”,”bea”,”eab” 和 “eba” ,s2=”acd” 的所有排列包括:”acd”,”adc”,”cad”,”cda”,”dac” 和 “dca”。然而没有任何 s1 的排列可以打破 s2 的排列。也没有 s2 的排列能打破 s1 的排列。
12345 ...
统计同质子字符串的数目
统计同质子字符串的数目
给你一个字符串 s ,返回 s 中 同质子字符串 的数目。由于答案可能很大,只需返回对 109 + 7 取余 后的结果。同质字符串 的定义为:如果一个字符串中的所有字符都相同,那么该字符串就是同质字符串。子字符串 是字符串中的一个连续字符序列。
输入:s = “abbcccaa”
输出:13解释:同质子字符串如下所列:“a” 出现 3 次。“aa” 出现 1 次。“b” 出现 2 次。“bb” 出现 1 次。“c” 出现 3 次。“cc” 出现 2 次。“ccc” 出现 1 次。3 + 1 + 2 + 1 + 3 + 2 + 1 = 13
123456789101112131415161718var countHomogenous = function(s) { let l=s.length; let res=0; let counter=1; let tmp=s[0]; for(let i=1;i<l+1;i++){ if(s[i]==tmp){ ...
多个数组求交集
多个数组求交集
给你一个二维整数数组 nums ,其中 nums[i] 是由 不同 正整数组成的一个非空数组,按 升序排列 返回一个数组,数组中的每个元素在 nums 所有数组 中都出现过。
输入:nums = [[3,1,2,4,5],[1,2,3,4],[3,4,5,6]]
输出:[3,4]解释: nums[0] = [3,1,2,4,5],nums[1] = [1,2,3,4],nums[2] = [3,4,5,6],在 nums 中每个数组中都出现的数字是 3 和 4 ,所以返回 [3,4] 。
输入:nums = [[1,2,3],[4,5,6]]
输出:[]解释:不存在同时出现在 nums[0] 和 nums[1] 的整数,所以返回一个空列表 [] 。
1234567891011121314var intersection = function(nums) { const map = {} const l = nums.length nums.forEach(item => { item.forEach ...
最小面积矩形
最小面积矩形
给定在 xy 平面上的一组点,确定由这些点组成的矩形的最小面积,其中矩形的边平行于 x 轴和 y 轴。如果没有任何矩形,就返回 0。
输入:[[1,1],[1,3],[3,1],[3,3],[2,2]]
输出:4
输入:[[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]]
输出:2
123456789101112131415161718192021222324var minAreaRect = function(points) { // 1. map; // 2. 左下、右上枚举 points.sort((a,b) => a[0] - b[0]); let m = new Map(); let res = Infinity; for (let [x,y] of points) { if (!m.has(x)) m.set(x, new Set()); m.get(x).add(y); } for (let i=0; i< ...
矩阵中的和
矩阵中的和
给你一个下标从 0 开始的二维整数数组 nums 。一开始你的分数为 0 。你需要执行以下操作直到矩阵变为空:矩阵中每一行选取最大的一个数,并删除它。如果一行中有多个最大的数,选择任意一个并删除。在步骤 1 删除的所有数字中找到最大的一个数字,将它添加到你的 分数 中。请你返回最后的 分数 。
输入:nums = [[7,2,1],[6,4,2],[6,5,3],[3,2,1]]
输出:15解释:第一步操作中,我们删除 7 ,6 ,6 和 3 ,将分数增加 7 。下一步操作中,删除 2 ,4 ,5 和 2 ,将分数增加 5 。最后删除 1 ,2 ,3 和 1 ,将分数增加 3 。所以总得分为 7 + 5 + 3 = 15 。
输入:nums = [[1]]
输出:1解释:我们删除 1 并将分数增加 1 ,所以返回 1 。
123456789101112var matrixSum = function(nums) { for (let row of nums) row.sort((a, b) => a - b); let ...
找出字符串的可整除数组
找出字符串的可整除数组
给你一个下标从 0 开始的字符串 word ,长度为 n ,由从 0 到 9 的数字组成。另给你一个正整数 m 。word 的 可整除数组 div 是一个长度为 n 的整数数组,并满足:如果 word[0,…,i] 所表示的 数值 能被 m 整除,div[i] = 1否则,div[i] = 0返回 word 的可整除数组。
输入:word = “998244353”, m = 3
输出:[1,1,0,0,0,1,1,0,0]
解释:仅有 4 个前缀可以被 3 整除:”9”、”99”、”998244” 和 “9982443” 。
输入:word = “1010”, m = 10
输出:[0,1,0,1]解释:仅有 2 个前缀可以被 10 整除:”10” 和 “1010” 。
123456789var divisibilityArray = function(word, m) { const ans = Array(word.length); let x = 0; for (let i = 0; i < word.l ...
n 的第 k 个因子
n 的第 k 个因子
给你两个正整数 n 和 k 。如果正整数 i 满足 n % i == 0 ,那么我们就说正整数 i 是整数 n 的因子。考虑整数 n 的所有因子,将它们 升序排列 。请你返回第 k 个因子。如果 n 的因子数少于 k ,请你返回 -1 。
输入:n = 12, k = 3
输出:3
解释:因子列表包括 [1, 2, 3, 4, 6, 12],第 3 个因子是 3 。
输入:n = 7, k = 2
输出:7解释:因子列表包括 [1, 7] ,第 2 个因子是 7 。
1234567891011var kthFactor = function(n, k) { for (let i = 1, count = 0; i <= n; i++) { if (n % i === 0) { count++; if (count === k) { return i; } } ...
反转两次的数字
反转两次的数字
反转 一个整数意味着倒置它的所有位。例如,反转 2021 得到 1202 。反转 12300 得到 321 ,不保留前导零 。给你一个整数 num ,反转 num 得到 reversed1 ,接着反转 reversed1 得到 reversed2 。如果 reversed2 等于 num ,返回 true ;否则,返回 false 。
输入:num = 526
输出:true解释:反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num 。
输入:num = 1800
输出:false解释:反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num 。
123var isSameAfterReversals = function(num) { return !num || num % 10};
数组元素积的符号
数组元素积的符号
已知函数 signFunc(x) 将会根据 x 的正负返回特定值:如果 x 是正数,返回 1 。如果 x 是负数,返回 -1 。如果 x 是等于 0 ,返回 0 。给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的乘积。返回 signFunc(product) 。
输入:nums = [-1,-2,-3,-4,3,2,1]
输出:1解释:数组中所有值的乘积是 144 ,且 signFunc(144) = 1
输入:nums = [1,5,0,2,-3]
输出:0解释:数组中所有值的乘积是 0 ,且 signFunc(0) = 0
12345678var arraySign = function(nums) { let t = true for (let i = 0; i < nums.length; i++) { if (nums[i] === 0) return 0 if (nums[i] < 0) t = !t } return t ? 1 : -1 ...