Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C++에서 짝수 개수의 모음을 포함하는 가장 긴 부분 문자열 찾기


문자열 s가 있다고 가정하면 각 모음을 짝수번 포함하는 가장 긴 부분 문자열의 크기를 찾아야 합니다. 즉, 'a', 'e', ​​'i', 'o', 'u'는 짝수 번 나타나야 합니다. 따라서 문자열이 "helloworld"와 같으면 출력은 8이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • ret :=0, 두 개의 맵 m 및 cnt 정의, m[“00000”] :=-1 설정

  • 모음 배열에 모음 저장

  • 범위 0에서 s 크기의 i에 대해

    • x :=s[i], 그리고 ok :=false

    • cnt[x] 1 증가, temp 설정 :=빈 문자열

    • 범위 0에서 4까지의 k에 대해:temp :=temp + '0' + cnt[모음[k]] mod 2

    • m에 temp가 있으면 ret :=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