Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนสระสูงสุดในสตริงย่อยของความยาวที่กำหนดใน C++


สมมติว่าเรามีสตริง s และจำนวนเต็ม k เราต้องหาจำนวนสูงสุดของตัวอักษรสระในสตริงย่อยของ s ที่มีความยาว k

ดังนั้น หากอินพุตเป็น s ="abciiiidef", k =3 เอาต์พุตจะเป็น 3

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • cnt :=0

  • กำหนดหนึ่งชุด ม

  • สำหรับแต่ละสระ v ทำ

    • แทรก v ลงใน m

  • ยกเลิก :=0

  • สำหรับการเริ่มต้น i :=0 เมื่อฉัน

    • cnt :=cnt + (1 เมื่อ s[i] อยู่ใน m มิฉะนั้น 0)

  • ret :=สูงสุดของ ret และ cnt

  • n :=ขนาดของ s

  • สำหรับการเริ่มต้น i :=k เมื่อฉัน

    • ถ้า s[i - k] เป็นสมาชิกของ m แล้ว −

      • (ลดลง 1)

    • cnt :=cnt + (1 เมื่อ s[i] อยู่ใน m มิฉะนั้น 0)

    • ret :=สูงสุดของ ret และ cnt

  • รีเทิร์น

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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