生成不含相邻零的二进制字符串
生成不含相邻零的二进制字符串
给你一个正整数 n。如果一个二进制字符串 x 的所有长度为 2 的子字符串中包含 至少 一个 “1”,则称 x 是一个 有效 字符串。返回所有长度为 n 的 有效 字符串,可以以任意顺序排列。
输入: n = 3输出: [“010”,”011”,”101”,”110”,”111”]解释:长度为 3 的有效字符串有:”010”、”011”、”101”、”110” 和 “111”。
输入: n = 1输出: [“0”,”1”]解释:长度为 1 的有效字符串有:”0” 和 “1”。
12345678910111213141516171819var validStrings = function(n) { const res = []; function dfs(arr) { if (arr.length === n) { res.push(arr.join('')); return; } if ( ...
两个字符串的排列差
两个字符串的排列差
给你两个字符串 s 和 t,每个字符串中的字符都不重复,且 t 是 s 的一个排列。排列差 定义为 s 和 t 中每个字符在两个字符串中位置的绝对差值之和。返回 s 和 t 之间的 排列差 。
输入:s = “abc”, t = “bac”输出:2
输入:s = “abcde”, t = “edbac”输出:12
123456789101112var findPermutationDifference = function(s, t) { let diff = 0; let indices = new Map(); let length = s.length; for (let i = 0; i < length; i++) { indices[s[i]] = i; } for (let i = 0; i < length; i++) { diff += Math.abs(indices[t[i]] - i); } re ...
每个字符最多出现两次的最长子字符串
每个字符最多出现两次的最长子字符串
给你一个字符串 s ,请找出满足每个字符最多出现两次的最长子字符串,并返回该子字符串的最大长度。
输入: s = “bcbbbcba”输出: 4解释:以下子字符串长度为 4,并且每个字符最多出现两次:”bcbbbcba”。
输入: s = “aaaa”输出: 2解释:以下子字符串长度为 2,并且每个字符最多出现两次:”aaaa”。
123456789101112131415var maximumLengthSubstring = function(s) { let ans = 0, left = 0, right = 0; const map = new Map(); while(left <= right && right < s.length) { if ((map.get(s[right]) || 0) < 2) { map.set(s[right], (map.get(s[right]) || 0) + 1); ...
删除回文子序列
删除回文子序列
给你一个字符串 s,它仅由字母 ‘a’ 和 ‘b’ 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。
输入:s = “ababa”输出:1解释:字符串本身就是回文序列,只需要删除一次。
输入:s = “abb”输出:2解释:”abb” -> “bb” -> “”.先删除回文子序列 “a”,然后再删除 “bb”。
1234567var removePalindromeSub = function(s) { const n = s.length for(let i = 0; i < n - i; i++) if(s.charCodeAt(i) !== s.charCodeAt(n - 1 - i)) return 2 r ...
破坏回文串
破坏回文串
给你一个由小写英文字母组成的回文字符串 palindrome ,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的 字典序最小 ,且 不是 回文串。请你返回结果字符串。如果无法做到,则返回一个 空串 。如果两个字符串长度相同,那么字符串 a 字典序比字符串 b 小可以这样定义:在 a 和 b 出现不同的第一个位置上,字符串 a 中的字符严格小于 b 中的对应字符。例如,”abcc” 字典序比 “abcd” 小,因为不同的第一个位置是在第四个字符,显然 ‘c’ 比 ‘d’ 小。
输入:palindrome = “abccba”输出:”aaccba”解释:存在多种方法可以使 “abccba” 不是回文,例如 “zbccba”, “aaccba”, 和 “abacba” 。在所有方法中,”aaccba” 的字典序最小。
输入:palindrome = “a”输出:””解释:不存在替换一个字符使 “a” 变成非回文的方法,所以返回空字符串。
1234567891011121314var breakPalindrome = function(palindrome ...
重构字符串
重构字符串
给定一个字符串 s ,检查是否能重新排布其中的字母,使得两相邻的字符不同。返回 s 的任意可能的重新排列。若不可行,返回空字符串 “” 。
输入: s = “aab”输出: “aba”
输入: s = “aaab”输出: “”
12345678var countBinarySubstrings = function(s) { let arr = s.replace(/10/g, '1 0').replace(/01/g, '0 1').split(/\s/) let n = 0 for(i=0; i< arr.length - 1; i++) { n += Math.min(arr[i].length, arr[i + 1].length) } return n};
计数二进制子串
计数二进制子串
给你一个整数数组 nums ,统计并返回在 nums 中同时至少具有一个严格较小元素和一个严格较大元素的元素数目。
输入:s = “00110011”输出:6解释:6 个子串满足具有相同数量的连续 1 和 0 :”0011”、”01”、”1100”、”10”、”0011” 和 “01” 。注意,一些重复出现的子串(不同位置)要统计它们出现的次数。另外,”00110011” 不是有效的子串,因为所有的 0(还有 1 )没有组合在一起。
输入:s = “10101”输出:4解释:有 4 个子串:”10”、”01”、”10”、”01” ,具有相同数量的连续 1 和 0 。
12345678var countBinarySubstrings = function(s) { let arr = s.replace(/10/g, '1 0').replace(/01/g, '0 1').split(/\s/) let n = 0 for(i=0; i< arr.length - 1; i++) ...
元音辅音字符串计数 II
元音辅音字符串计数 II
给你一个字符串 word 和一个 非负 整数 k。返回 word 的子字符串中,每个元音字母(’a’、’e’、’i’、’o’、’u’)至少 出现一次,并且 恰好 包含 k 个辅音字母的子字符串的总数。
输入:word = “aeioqq”, k = 1输出:0解释:不存在包含所有元音字母的子字符串。
输入:word = “aeiou”, k = 0输出:1解释:唯一一个包含所有元音字母且不含辅音字母的子字符串是 word[0..4],即 “aeiou”。
12345678910111213141516171819202122232425262728293031var countOfSubstrings = function (word, k) { const getAns = (word, k) => { const map = new Map(); const s = ['a', 'e', 'i', 'o', ...
最长单词
最长单词
给定一组单词 words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成。若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串。
输入: [“cat”,”banana”,”dog”,”nana”,”walk”,”walker”,”dogwalker”]输出: “dogwalker”解释: “dogwalker”可由”dog”和”walker”组成。
12345678910111213141516171819202122232425262728293031323334353637383940var longestWord = function(words) { words.sort((a, b) => { if (!(a.length - b.length)) { return a < b ? 1 : -1 } return a.length - b.length; }); ...
统计桌面上的不同数字
统计桌面上的不同数字
给你一个正整数 n ,开始时,它放在桌面上。在 109 天内,每天都要执行下述步骤:对于出现在桌面上的每个数字 x ,找出符合 1 <= i <= n 且满足 x % i == 1 的所有数字 i 。然后,将这些数字放在桌面上。返回在 10^9 天之后,出现在桌面上的 不同 整数的数目。注意:一旦数字放在桌面上,则会一直保留直到结束。% 表示取余运算。例如,14 % 3 等于 2 。
输入:n = 5输出:4解释:最开始,5 在桌面上。第二天,2 和 4 也出现在桌面上,因为 5 % 2 == 1 且 5 % 4 == 1 。再过一天 3 也出现在桌面上,因为 4 % 3 == 1 。在十亿天结束时,桌面上的不同数字有 2 、3 、4 、5 。
输入:n = 3输出:2解释:因为 3 % 2 == 1 ,2 也出现在桌面上。在十亿天结束时,桌面上的不同数字只有两个:2 和 3 。
123var distinctIntegers = function(n) { return n > 1 ? n - 1 : 1 } ...