1794.【軟件認證】最長的指定瑕疵度的元音子串
這個例題,是滑動窗口中長度不定求最大的題目,在看題之前可以先看一下【leetcode每日一題】【滑動窗口長度不固定】案例。
題目描述
定義:開頭和結尾都是元音字母(aeiouAEIOU
)的字符串為 元音字符串 ,其中混雜的非元音字母數量為其 瑕疵度 。比如:
- “a” 、 “aa”是元音字符串,其瑕疵度都為0
- “aiur”不是元音字符串(結尾不是元音字符)
- “abira”是元音字符串,其瑕疵度為2
給定一個字符串,請找出指定瑕疵度的最長元音字符子串,并輸出其長度,如果找不到滿足條件的元音字符子串,輸出0
。
子串:字符串中任意個連續的字符組成的子序列稱為該字符串的子串。
思路
窗口里的瑕疵度的字母含量只能是k,求最大長度,如果大于k縮小窗口,但是如果<k
,因此我們需要判斷一下,符合條件的才去更新長度。
以下是一個實現了上述算法的 JavaScript 示例代碼:
const getLongestFlawedVowelSubstrLen = (flaw, input) => {let count = 0let res = 0let left = 0let 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;};