주어진 작업은 길이가 K인 부분 문자열의 최대 개수를 찾는 것입니다. 동일한 문자로 구성됩니다. 주어진 문자열 s와 다른 정수 K , 우리는 K 크기의 하위 문자열의 발생을 계산해야 합니다. 같은 문자가 있습니다.
발견된 부분 문자열 중에서 가장 많이 발생하는 부분 문자열을 선택해야 합니다.
이제 예제를 사용하여 무엇을 해야 하는지 이해합시다 -
입력
s = ”tuuxyyuuc”, K = 2
출력
2
설명
여기에서 길이가 2이고 동일한 문자를 갖는 하위 문자열은 "uu" 및 "yy"이지만 "yy"는 1번만 발생하고 "uu"는 2번 나타나는 것을 알 수 있습니다. 따라서 출력은 2가 됩니다.
입력
s = “hhigggff”, K = 3
출력
1
아래 프로그램에서 사용하는 접근 방식은 다음과 같습니다.
-
Max() 함수에서 int ans =0으로 초기화하여 최종 답변을 저장하고 size =str.size()로 문자열의 크기를 저장하고 char c를 선언하여 확인할 문자를 저장합니다.
-
j =0에서 j <26까지 반복하고 각 문자를 확인할 때 c ='a' + j를 입력합니다.
-
현재 문자를 포함하는 하위 배열의 발생을 저장하기 위해 변수 int CurrCh =0을 초기화합니다.
-
i =0에서 i <=size – K까지 루프하고 (str[i] !=c)인지 확인합니다. 그렇다면 계속을 추가하십시오. 성명서.
-
현재 문자의 하위 배열 길이를 저장하려면 count =0을 초기화합니다.
-
조건(i
count 증분 . while 루프 밖에서는 i를 1만큼 감소시킵니다. -
(카운트 ==K)인지 확인하십시오. 그렇다면 CurrCh를 증가시키십시오. .
-
두 번째 For 루프를 닫고 ans 값을 업데이트합니다. ans =max(ans, CurrCh)를 입력하여.
-
마지막으로 첫 번째 For 루프를 닫고 ans를 반환합니다. .
예시
#include <bits/stdc++.h>
using namespace std;
int Max(string str, int K){
int ans = 0, size = str.size();
char c;
//Checking for all characters
for (int j = 0; j < 26; j++){
c = 'a' + j;
//checking for current character
int CurrCh = 0;
for (int i = 0; i <= size - K; i++){
if (str[i] != c)
continue;
//Counting the size of sub-string
int count = 0;
while (i < size && count != K && str[i] == c){
i++;
count++;
}
i--;
//Increment CurrCh if sub-string has length K
if (count == K)
CurrCh++;
}
//Update ans
ans = max(ans, CurrCh);
}
return ans;
}
//main function
int main(){
string str = "tuuuxyuuu";
int K = 3;
cout << Max(str, K);
return 0;
} 출력
2