最后一个单词的长度
最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
输入:s = “Hello World”输出:5解释:最后一个单词是“World”,长度为 5。
输入:s = “ fly me to the moon “输出:4解释:最后一个单词是“moon”,长度为 4。
12345678910111213var lengthOfLastWord = function(s) { let i = s.length - 1; while (s[i] === ' ') { i--; } let j = i - 1; while (j >= 0 && s[j] !== ' ') { j--; } return i - j;};
删除字符使频率相同
删除字符使频率相同
给你一个下标从 0 开始的字符串 word ,字符串只包含小写英文字母。你需要选择 一个 下标并 删除 下标处的字符,使得 word 中剩余每个字母出现 频率 相同。如果删除一个字母后,word 中剩余所有字母的出现频率都相同,那么返回 true ,否则返回 false 。注意:字母 x 的 频率 是这个字母在字符串中出现的次数。你 必须 恰好删除一个字母,不能一个字母都不删除。
输入:word = “abcc”输出:true解释:选择下标 3 并删除该字母:word 变成 “abc” 且每个字母出现频率都为 1 。
输入:word = “aazz”输出:false解释:我们必须删除一个字母,所以要么 “a” 的频率变为 1 且 “z” 的频率为 2 ,要么两个字母频率反过来。所以不可能让剩余所有字母出现频率相同。
123456789var equalFrequency = function(word) { for (let i = 0; i < word.length; i++) { const obj =_ ...
回文排列
回文排列
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词
输入:”tactcoa”输出:true(排列有”tacocat”、”atcocta”,等等)
12345678910111213141516171819202122var isFlipedString = function(s1, s2) { const m = s1.length, n = s2.length; if (m !== n) { return false; } if (n === 0) { return true; } for (let i = 0; i < n; i++) { let flag = true; for (let j = 0; j < n; j++) { if (s1[(i + j) % n] ...
字符串轮转
字符串轮转
字符串轮转。给定两个字符串 s1 和 s2,请编写代码检查 s2 是否为 s1 旋转而成(比如,waterbottle 是 erbottlewat 旋转后的字符串)。
输入:s1 = “waterbottle”, s2 = “erbottlewat”输出:True
输入:s1 = “aa”, s2 = “aba”输出:False
12345678910111213141516171819202122var isFlipedString = function(s1, s2) { const m = s1.length, n = s2.length; if (m !== n) { return false; } if (n === 0) { return true; } for (let i = 0; i < n; i++) { let flag = true; for (let j = 0; j < n; ...
括号的最大嵌套深度
括号的最大嵌套深度
给定 有效括号字符串 s,返回 s 的 嵌套深度。嵌套深度是嵌套括号的 最大 数量。
输入:s = “(1+(2*3)+((8)/4))+1”输出:3解释:数字 8 在嵌套的 3 层括号中。
输入:s = “(1)+((2))+(((3)))”输出:3解释:数字 3 在嵌套的 3 层括号中。
1234567891011121314151617var maxDepth = function(s) { if(s == '') return 0 let count = 0 let res = 0 let len = s.length for(let i = 0;i<len;i++){ if(s[i] == '('){ count++ res = count > res ? count :res }else if(s[i] == ')'){ ...
有效单词
有效单词
有效单词 需要满足以下几个条件:至少 包含 3 个字符。由数字 0-9 和英文大小写字母组成。(不必包含所有这类字符。)至少 包含一个 元音字母 。至少 包含一个 辅音字母 。给你一个字符串 word 。如果 word 是一个有效单词,则返回 true ,否则返回 false 。注意:‘a’、’e’、’i’、’o’、’u’ 及其大写形式都属于 元音字母 。英文中的 辅音字母 是指那些除元音字母之外的字母。
输入:word = “234Adas”输出:true解释:这个单词满足所有条件。
输入:word = “b3”输出:false解释:这个单词的长度少于 3 且没有包含元音字母。
123var isValid = function(word) { return /^(?=.*[aeiou])(?=.*[^aeiou0-9])[a-z0-9]{3,}$/i.test(word);};
同位字符串连接的最小长度
同位字符串连接的最小长度
给你一个字符串 s ,它由某个字符串 t 和若干 t 的 同位字符串 连接而成。请你返回字符串 t 的 最小 可能长度。同位字符串 指的是重新排列一个单词得到的另外一个字符串,原来字符串中的每个字符在新字符串中都恰好只使用一次。
输入:s = “abba”输出:2解释:一个可能的字符串 t 为 “ba” 。
输入:s = “cdef”输出:4解释:一个可能的字符串 t 为 “cdef” ,注意 t 可能等于 s 。
1234567891011121314151617181920var minAnagramLength = function(s) { let m = s.length let n = m/2 let i = 1 while(i<=n){ if(m%i==0){ let p = new Set() let j = 0 while(j<m/i){ let d ...
最长有效括号
最长有效括号
给你一个只包含 ‘(‘ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
输入:s = “(()”输出:2解释:最长有效括号子串是 “()”
输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”
1234567891011121314151617181920212223var longestValidParentheses = function(s) { let max = 0; let stack = [-1]; for (let i = 0; i < s.length; i++) { if (s[i] === ')') { stack.pop(); if (stack.length === 0) { stack.push(i); continue; } const cur = i - stack[stack.length - 1]; if (cur & ...
将字符串翻转到单调递增
将字符串翻转到单调递增
如果一个由 ‘0’ 和 ‘1’ 组成的字符串,是以一些 ‘0’(可能没有 ‘0’)后面跟着一些 ‘1’(也可能没有 ‘1’)的形式组成的,那么该字符串是 单调递增 的。我们给出一个由字符 ‘0’ 和 ‘1’ 组成的字符串 s,我们可以将任何 ‘0’ 翻转为 ‘1’ 或者将 ‘1’ 翻转为 ‘0’。返回使 s 单调递增 的最小翻转次数。
输入:s = “00110”输出:1解释:我们翻转最后一位得到 00111.
输入:s = “010110”输出:2解释:我们翻转得到 011111,或者是 000111。
12345var minFlipsMonoIncr = function(s) { let c = 0; while (s.indexOf('10') > -1) s = s.replace(/10/g, () => (c++, '')); return c;};
验证回文串 II
验证回文串 II
给你一个字符串 s,最多 可以从中删除一个字符。请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。
输入:s = “aba”输出:true
输入:s = “abca”输出:true解释:你可以删除字符 ‘c’ 。
12345678910111213141516171819202122function isPalindrome(str, l, r) { while (l < r) { //对撞指针不断判断两边的数字是否相等 if (str[l] != str[r]) { return false; } l++; r--; } return true;}var validPalindrome = function (str) { let l = 0, r = str.length - 1; //头尾指针 while (l < r) & ...