C++ 中给定长度子字符串中元音字母的最大数量

c++server side programmingprogramming

假设我们有一个字符串 s 和一个整数 k。我们需要找出 s 中任意长度为 k 的子字符串中元音字母的最大数量。

因此,如果输入为 s = "abciiiidef",k = 3,则输出为 3

为了解决这个问题,我们将遵循以下步骤 −

  • cnt := 0

  • 定义一个集合 m

  • 对于每个元音字母 v,执行

    • 将 v 插入到 m 中

  • ret := 0

  • 初始化 i := 0,当 i < k,更新(将 i 加 1),执行 −

    • cnt := cnt + (当 s[i] 在 m 中时为 1,否则为 0)

  • ret := ret 和 cnt 中的最大值

  • n := s 的大小

  • 用于初始化 i := k,当 i < 时n,更新(将 i 加 1),执行 −

    • 如果 s[i - k] 是 m 的成员,则 −

      • (将 cnt 减 1)

    • cnt := cnt + (当 s[i] 在 m 中时为 1,否则为 0)

    • ret := ret 和 cnt 中的最大值

  • return ret

示例

让我们看下面的实现,以便更好地理解 −

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int maxVowels(string s, int k) {
      int cnt = 0;
      set<char> m;
      for (auto it : { 'a', 'e', 'i', 'o', 'u' })
      m.insert(it);
      int ret = 0;
      for (int i = 0; i < k; i++) {
         cnt += m.count(s[i]) ? 1 : 0;
      }
      ret = max(ret, cnt);
      int n = s.size();
      for (int i = k; i < n; i++) {
         if (m.count(s[i - k])) {
            cnt--;
         }
         cnt += m.count(s[i]) ? 1 : 0;
         ret = max(ret, cnt);
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.maxVowels("abciiidef",3));
}

输入

"abciiidef",3

输出

3

相关文章