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

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


สมมติว่าเรามีสตริง s เราต้องหาขนาดของสตริงย่อยที่ยาวที่สุดที่มีแต่ละสระเป็นจำนวนคู่ นั่นคือ 'a', 'e', ​​'i', 'o' และ 'u' ต้องปรากฏเป็นจำนวนคู่ ดังนั้นหากสตริงเป็นเหมือน “helloworld” ผลลัพธ์จะเป็น 8

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

  • ret :=0 กำหนดสองแผนที่ m และ cnt ตั้งค่า m[“00000”] :=-1

  • เก็บสระไว้ในอาร์เรย์สระ

  • สำหรับฉันอยู่ในช่วง 0 ถึงขนาดของ s

    • x :=s[i], และ ok :=false

    • เพิ่ม cnt[x] ขึ้น 1, set temp :=สตริงว่าง

    • สำหรับ k ในช่วง 0 ถึง 4:temp :=temp + '0' + cnt[vowels[k]] mod 2

    • ถ้า m มี temp แล้ว ret :=max of ret และ i – m[temp] มิฉะนั้น m[temp] :=i

  • รีเทิร์น

ตัวอย่าง (C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int findTheLongestSubstring(string s) {
      int ret = 0;
      map <string, int> m;
      map <char, int> cnt;
      m["00000"] = -1;
      char vowels[5] = {'a', 'e', 'i', 'o', 'u'};
      for(int i = 0; i < s.size(); i++){
         char x = s[i];
         bool ok = false;
         cnt[x]++;
         string temp = "";
         for(int k = 0; k < 5; k++){
            temp+= ('0' + (cnt[vowels[k]] % 2));
         }
         if(m.count(temp)){
            ret = max(ret, i - m[temp]);
         }
         else{
            m[temp] = i;
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.findTheLongestSubstring("helloworld"));
}

อินพุต

“helloworld”

ผลลัพธ์

8