문자열 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