不含 AAA 或 BBB 的字符串
不含 AAA 或 BBB 的字符串
给定两个整数 a 和 b ,返回 任意 字符串 s ,要求满足:s 的长度为 a + b,且正好包含 a 个 ‘a’ 字母与 b 个 ‘b’ 字母;子串 ‘aaa’ 没有出现在 s 中;子串 ‘bbb’ 没有出现在 s 中。
输入:a = 1, b = 2
输出:”abb”解释:”abb”, “bab” 和 “bba” 都是正确答案。
输入:a = 4, b = 1
输出:”aabaa”
123456789101112131415161718192021222324var strWithout3a3b = function(A, B) { var max = Math.max(A, B), min = B, a,b, str=''; if (max - 3 >= 2 * min){return false;} if (max == A) { a = 'a'; b = 'b'; ...
比较含退格的字符串
比较含退格的字符串
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。
输入:s = “ab#c”, t = “ad#c”
输出:true解释:s 和 t 都会变成 “ac”。
输入:s = “ab##”, t = “c#d#”
输出:true解释:s 和 t 都会变成 “”。
12345678910111213141516171819202122232425262728293031var backspaceCompare = function(S, T) { let i = S.length - 1, j = T.length - 1, skipS = 0, skipT = 0; //双指针从右往左循环 while(i >= 0 || j >= 0){ while(i >= 0){//处理掉# 直到left指向的字符右边退格全部处理掉 ...
仅仅反转字母
仅仅反转字母
给你一个字符串 s ,根据下述规则反转字符串:所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。返回反转后的 s 。
输入:s = “ab-cd”
输出:”dc-ba”
输入:s = “a-bC-dEf-ghIj”
输出:”j-Ih-gfE-dCba”
12345678910111213141516171819var reverseOnlyLetters = function(s) { const min1 = 'a', max1 = 'z'; const min2 = 'A', max2 = 'Z'; const arr = s.split(''); const queue = []; // 判断字符是否为字母 const isAlp = (arr,i) => {return arr[i] >= min1 && arr[i] <= max1 || arr ...
每个元音包含偶数次的最长子字符串
每个元音包含偶数次的最长子字符串
给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,’e’,’i’,’o’,’u’ ,在子字符串中都恰好出现了偶数次。
输入:s = “eleetminicoworoep”
输出:13解释:最长子字符串是 “leetminicowor” ,它包含 e,i,o 各 2 个,以及 0 个 a,u 。
输入:s = “leetcodeisgreat”
输出:5解释:最长子字符串是 “leetc” ,其中包含 2 个 e 。
123456789101112131415161718var findTheLongestSubstring = function(str) { let res = 0 let state = 0 // 前缀区间的state状态 let vowel = { a: 1, e: 2, i: 4, o: 8, u: 16 } // 对照表 let map = { 0: -1 } // map存放各个前缀区间的state ...
日期之间隔几天
日期之间隔几天
请你编写一个程序来计算两个日期之间隔了多少天。日期以字符串形式给出,格式为 YYYY-MM-DD,如示例所示。
输入:date1 = “2019-06-29”, date2 = “2019-06-30”
输出:1
输入:date1 = “2020-01-15”, date2 = “2019-12-31”
输出:15
12345var daysBetweenDates = function(date1, date2) { date1 = new Date(date1).getTime(); date2 = new Date(date2).getTime(); return Math.abs(date1 - date2) / 1000 / 60 / 60 / 24;};
最小覆盖子串
最小覆盖子串
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。
输入:s = “ADOBECODEBANC”, t = “ABC”
输出:”BANC”解释:最小覆盖子串 “BANC” 包含来自字符串 t 的 ‘A’、’B’ 和 ‘C’。
输入:s = “a”, t = “a”
输出:”a”解释:整个字符串 s 是最小覆盖子串。
12345678910111213141516171819202122232425262728293031323334353637383940var minWindow = function(s, t) { let need = {};//需要覆盖的字符串频数 let window = {};//滑动窗口的字符串频数 for (let a of t) ...
检查两个字符串数组是否相等
检查两个字符串数组是否相等
给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。
输入:word1 = [“ab”, “c”], word2 = [“a”, “bc”]
输出:true解释:word1 表示的字符串为 “ab” + “c” -> “abc”word2 表示的字符串为 “a” + “bc” -> “abc”两个字符串相同,返回 true
输入:word1 = [“a”, “cb”], word2 = [“ab”, “c”]
输出:false
123var arrayStringsAreEqual = function(word1, word2) { return word1.join("") === word2.join("");};
摧毁小行星
摧毁小行星
给你一个整数 mass ,它表示一颗行星的初始质量。再给你一个整数数组 asteroids ,其中 asteroids[i] 是第 i 颗小行星的质量。你可以按 任意顺序 重新安排小行星的顺序,然后让行星跟它们发生碰撞。如果行星碰撞时的质量 大于等于 小行星的质量,那么小行星被 摧毁 ,并且行星会 获得 这颗小行星的质量。否则,行星将被摧毁。如果所有小行星 都 能被摧毁,请返回 true ,否则返回 false 。
输入:mass = 10, asteroids = [3,9,19,5,21]
输出:true解释:一种安排小行星的方式为 [9,19,5,3,21] :
行星与质量为 9 的小行星碰撞。新的行星质量为:10 + 9 = 19
行星与质量为 19 的小行星碰撞。新的行星质量为:19 + 19 = 38
行星与质量为 5 的小行星碰撞。新的行星质量为:38 + 5 = 43
行星与质量为 3 的小行星碰撞。新的行星质量为:43 + 3 = 46
行星与质量为 21 的小行星碰撞。新的行星质量为:46 + 21 = 67所有小行星都被摧毁。
输入: ...
乘积最大子数组
乘积最大子数组
给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个 32-位 整数。
输入: nums = [2,3,-2,4]
输出: 6解释: 子数组 [2,3] 有最大乘积 6。
输入: nums = [-2,0,-1]
输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
123456789101112// 维护当前的最小值,如果当前元素是负值,交换最小值和最大值的值再相乘,// 因为存在负数会使当前最小的变成最大的,最大的变成最小的var maxProduct = function(nums) { let ans = -Infinity,imax = 1,imin = 1; for(const num of nums) { if(num < 0) [imax,imin] = [imin,imax] imax = Math.max(imax*num,num); imin ...
直线上最多的点数
直线上最多的点数
给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。
输入:points = [[1,1],[2,2],[3,3]]
输出:3
输入:points = [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]
输出:4
123456789101112131415161718192021222324252627var maxPoints = function(points) { let ans = 1; const n = points.length, map = new Map(); for (let i = 0; i < n; i++) { if (ans >= n - i) break; const x1 = points[i][0], y1 = points[i][1]; for (let j = i + 1; j < n; j++) { ...