【LeetCode】【滑动窗口长度不固定】978最长湍流子数组
- 电脑硬件
- 2025-08-03 13:42:01

1794.【软件认证】最长的指定瑕疵度的元音子串
这个例题,是滑动窗口中长度不定求最大的题目,在看题之前可以先看一下【leetcode每日一题】【滑动窗口长度不固定】案例。
题目描述
定义:开头和结尾都是元音字母(aeiouAEIOU)的字符串为 元音字符串 ,其中混杂的非元音字母数量为其 瑕疵度 。比如:
“a” 、 “aa”是元音字符串,其瑕疵度都为0“aiur”不是元音字符串(结尾不是元音字符)“abira”是元音字符串,其瑕疵度为2给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0。
子串:字符串中任意个连续的字符组成的子序列称为该字符串的子串。
思路窗口里的瑕疵度的字母含量只能是k,求最大长度,如果大于k缩小窗口,但是如果<k
,因此我们需要判断一下,符合条件的才去更新长度。
以下是一个实现了上述算法的 JavaScript 示例代码:
const getLongestFlawedVowelSubstrLen = (flaw, input) => { let count = 0 let res = 0 let left = 0 let set = new Set(['a','e','i','o','u']); for (let i = 0; i < input.length; i++) { // 向右扩大窗口,维护窗口中的瑕疵度 if (!set.has(input[i].toLowerCase())) { count++ } // 缩小窗口 while (count > flaw) { if (!set.has(input[left].toLowerCase())) { count--; } left++; } // 满足条件的时候,更新结果。 if(set.has(input[i].toLowerCase())&&set.has(input[left].toLowerCase())&&count===flaw){ res = Math.max(res, i-left+1) } } return res; } 978 最长湍流子数组给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 。
如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。
/** * @param {number[]} arr * @return {number} */ var maxTurbulenceSize = function(arr) { let simple = [-2]; for (let i = 1; i < arr.length; i++) { if (arr[i] > arr[i - 1]) { simple.push(1); } else if (arr[i] < arr[i - 1]) { simple.push(-1); } else { simple.push(0); } } let left = 0; let max = 1; for(let i = 1; i < simple.length; i++){ if(simple[i] != 0 && simple[i] != simple[i-1]){ max = Math.max(max, i - left + 1); } else{ left++; simple[left] = -2; i = left; } } return max; };【LeetCode】【滑动窗口长度不固定】978最长湍流子数组由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【LeetCode】【滑动窗口长度不固定】978最长湍流子数组”
上一篇
js之数组遍历
下一篇
【MySQL】表的操作