字母在字符串中的百分比
字母在字符串中的百分比
给你一个字符串 s 和一个字符 letter ,返回在 s 中等于 letter 字符所占的 百分比 ,向下取整到最接近的百分比。
输入:s = “foobar”, letter = “o”输出:33解释:等于字母 ‘o’ 的字符在 s 中占到的百分比是 2 / 6 * 100% = 33% ,向下取整,所以返回 33 。
输入:s = “jjjj”, letter = “k”输出:0解释:等于字母 ‘k’ 的字符在 s 中占到的百分比是 0% ,所以返回 0 。
12345678910var percentageLetter = function(s, letter) { const len = s.length; let count = 0; for (const char of s) { if (char === letter) { count++; } } return Math.floor(count / len ...
包含所有三种字符的子字符串数目
包含所有三种字符的子字符串数目
给你一个字符串 s ,它只包含三种字符 a, b 和 c 。请你返回 a,b 和 c 都 至少 出现过一次的子字符串数目。
输入:s = “abcabc”输出:10解释:包含 a,b 和 c 各至少一次的子字符串为 “abc”, “abca”, “abcab”, “abcabc”, “bca”, “bcab”, “bcabc”, “cab”, “cabc” 和 “abc” (相同字符串算多次)。
输入:s = “aaacb”输出:3解释:包含 a,b 和 c 各至少一次的子字符串为 “aaacb”, “aacb” 和 “acb” 。
12345678910111213141516171819202122var numberOfSubstrings = function(s) { let hash = { a: 0, b: 0, c: 0 } let arr = s.split('') let count = 0 let le ...
两个相同字符之间的最长子字符串
两个相同字符之间的最长子字符串
给你一个字符串 s,请你返回 两个相同字符之间的最长子字符串的长度 ,计算长度时不含这两个字符。如果不存在这样的子字符串,返回 -1 。子字符串 是字符串中的一个连续字符序列。
输入:s = “aa”输出:0解释:最优的子字符串是两个 ‘a’ 之间的空子字符串。
输入:s = “abca”输出:2解释:最优的子字符串是 “bc” 。
s 是一个半重复字符串。
1234567891011121314var maxLengthBetweenEqualCharacters = function(s) { let m = new Map(); for (let i=0; i<s.length; i++) { if (!m.has(s[i])) m.set(s[i], [i]); else m.get(s[i])[1] = i; } let res = -1; for (let v of m.values()) { if (v.lengt ...
找到最长的半重复子字符串
找到最长的半重复子字符串
给你一个下标从 0 开始的字符串 s ,这个字符串只包含 0 到 9 的数字字符。如果一个字符串 t 中至多有一对相邻字符是相等的,那么称这个字符串 t 是 半重复的 。例如,”0010” 、”002020” 、”0123” 、”2002” 和 “54944” 是半重复字符串,而 “00101022” (相邻的相同数字对是 00 和 22)和 “1101234883” (相邻的相同数字对是 11 和 88)不是半重复字符串。请你返回 s 中最长半重复子字符串的长度。
输入:s = “52233”输出:4解释:最长的半重复子字符串是 “5223”。整个字符串 “52233” 有两个相邻的相同数字对 22 和 33,但最多只能选取一个。
输入:s = “5494”输出:4解释:
s 是一个半重复字符串。
1234567891011121314151617181920var longestSemiRepetitiveSubstring = function(s) { const n = s.length let i = 0 le ...
成为 K 特殊字符串需要删除的最少字符数
成为 K 特殊字符串需要删除的最少字符数
给你一个字符串 word 和一个整数 k。如果 |freq(word[i]) - freq(word[j])| <= k 对于字符串中所有下标 i 和 j 都成立,则认为 word 是 k 特殊字符串。此处,freq(x) 表示字符 x 在 word 中的出现频率,而 |y| 表示 y 的绝对值。返回使 word 成为 k 特殊字符串 需要删除的字符的最小数量。
输入:word = “aabcaba”, k = 0输出:3解释:可以删除 2 个 “a” 和 1 个 “c” 使 word 成为 0 特殊字符串。word 变为 “baba”,此时 freq(‘a’) == freq(‘b’) == 2。
输入:word = “dabdcbdcdcd”, k = 2输出:2解释:可以删除 1 个 “a” 和 1 个 “d” 使 word 成为 2 特殊字符串。word 变为 “bdcbdcdcd”,此时 freq(‘b’) == 2,freq(‘c’) == 3,freq(‘d’) == 4。
12345678910111213141 ...
字符串及其反转中是否存在同一子字符串
字符串及其反转中是否存在同一子字符串
给你一个字符串 s ,请你判断字符串 s 是否存在一个长度为 2 的子字符串,在其反转后的字符串中也出现。如果存在这样的子字符串,返回 true;如果不存在,返回 false 。
输入:s = “leetcode”输出:true解释:子字符串 “ee” 的长度为 2,它也出现在 reverse(s) == “edocteel” 中。
输入:s = “abcba”输出:true解释:所有长度为 2 的子字符串 “ab”、”bc”、”cb”、”ba” 也都出现在 reverse(s) == “abcba” 中。
12345678910111213var isSubstringPresent = function(s) { let i let tmp = s.split('').reverse().join('') for(i = 0;i < s.length-1;i ++){ let cur = s[i] + s[i+1] //假设为AB ...
移除指定数字得到的最大结果
移除指定数字得到的最大结果
给你一个表示某个正整数的字符串 number 和一个字符 digit 。从 number 中 恰好 移除 一个 等于 digit 的字符后,找出并返回按 十进制 表示 最大 的结果字符串。生成的测试用例满足 digit 在 number 中出现至少一次。
输入:number = “123”, digit = “3”输出:”12”解释:”123” 中只有一个 ‘3’ ,在移除 ‘3’ 之后,结果为 “12” 。
输入:number = “1231”, digit = “1”输出:”231”解释:可以移除第一个 ‘1’ 得到 “231” 或者移除第二个 ‘1’ 得到 “123” 。由于 231 > 123 ,返回 “231” 。
123456789101112131415161718192021var removeDigit = function(number, digit) { let ans = '', del = false; for (let i = 0; i < number.length ...
字符串解码
字符串解码
给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。
输入:s = “3[a]2[bc]”输出:”aaabcbc”
输入:s = “3[a2[c]]”输出:”accaccacc”
123456789101112131415161718192021222324var decodeString = function(s) { let numStack = []; let strStack = []; let ans = ""; let count = 0; for (let i = 0; i < s.length; i++) { let ...
使三个字符串相等
使三个字符串相等
给你三个字符串 s1、s2 和 s3。 你可以根据需要对这三个字符串执行以下操作 任意次数 。在每次操作中,你可以选择其中一个长度至少为 2 的字符串 并删除其 最右位置上 的字符。如果存在某种方法能够使这三个字符串相等,请返回使它们相等所需的 最小 操作次数;否则,返回 -1。
输入:s1 = “abc”,s2 = “abb”,s3 = “ab”输出:2解释:对 s1 和 s2 进行一次操作后,可以得到三个相等的字符串。可以证明,不可能用少于两次操作使它们相等。
输入:s1 = “dac”,s2 = “bac”,s3 = “cac”输出:-1解释:因为 s1 和 s2 的最左位置上的字母不相等,所以无论进行多少次操作,它们都不可能相等。因此答案是 -1 。
12345678910111213141516var findMinimumOperations = function(s1, s2, s3) { if (s1[0] != s2[0] || s1[0] != s3[0] || s2[0] != s3[0]) { ...
连续字符
连续字符
给你一个字符串 s ,字符串的「能量」定义为:只包含一种字符的最长非空子字符串的长度。请你返回字符串 s 的 能量。
输入:s = “leetcode”输出:2解释:子字符串 “ee” 长度为 2 ,只包含字符 ‘e’ 。
输入:s = “abbcccddddeeeeedcba”输出:5解释:子字符串 “eeeee” 长度为 5 ,只包含字符 ‘e’ 。
12345678910var maxPower = function(s) { let ans = 0 for(let i=0,j=0;i<s.length;){ while(j<s.length&&s.charAt(j)==s.charAt(i)) j++ ans = Math.max(ans, j - i) i = j } return ans};