力扣:滑动窗口与双指针 记录自用

📅 2026/7/24 17:28:56
力扣:滑动窗口与双指针 记录自用
1456. 定长子串中元音的最大数目 - 力扣LeetCodehttps://leetcode.cn/problems/maximum-number-of-vowels-in-a-substring-of-given-length/description/class Solution {public:int maxVowels(string s, int k) {int left0;//左指针下标int right0;//右指针下标int lenghts.length();//字符串长度int count0;//元音字母数目int max_count0;//当前最大元音字母数目while(rightlenght)//右指针对应数组下标小于字符串长度{if(s[right]a||s[right]e||s[right]i||s[right]o||s[right]u)//判断当前右指针是否是元音字母{countcount1;}if(right-left1k)//窗口大小大于K时{if(s[left]a||s[left]e||s[left]i||s[left]o||s[left]u){countcount-1;}leftleft1;}rightright1;max_countmax(max_count,count);//更新最大元音字母数目}return max_count;}};/*滑动窗口左右指针左指针对应位置指向窗口的第一个元素右指针对应位置指向窗口的最后一个元素窗口大小是右指针对应数组下标减去左指针对应数组/字符串下标加一整个过程右指针对应数组/字符串下标小于数组/字符串长度左右指针起始位置都是数组/字符串下标为0的位置已知窗口的长度为K1窗口大小还没有到或恰好为K时右指针下标位置-01的结果小于等于K左指针指向数组/字符串下标0,若结果小于K且右指针对应位置小于数组/字符串长度则左指针不动右指针向右移动一位2窗口大小大于K时左指针需要开始移动右指下标位置-01的结果大于K左指针和右指针都要同时向右移动一位每移动左指针时检查左指针指向元素是否是元音字母若是该窗口元音字母个数减一若不是则不变每移动右指针时检查右指针指向元素是否是元音字母若是该窗口元音字母个数加一若不是则不变每一次窗口变化结束都只保留元音字母个数最大的结果*/