주어진 작업은 문자열에서 주어진 하위 시퀀스의 최대 제거 수를 찾는 것입니다. Astring s가 주어지고 문자열에서 제거할 수 있는 하위 시퀀스 'abc'의 최대 수를 찾아야 합니다.
이제 예제를 사용하여 수행해야 하는 작업을 이해해 보겠습니다.
입력
s = ‘dnabcxy’
출력
1
설명 − 주어진 문자열('dnabcxy')에서 'abc'의 하위 시퀀스 하나만 찾을 수 있으므로 출력은 1입니다.
입력
s = ‘zcabcxabc’
출력
2 (‘zcabcxabc’)
아래 프로그램에서 사용하는 접근 방식은 다음과 같습니다.
-
Max() 함수에서 값이 0이고 int 유형인 변수 i, a, ab, abc를 초기화합니다.
-
i=0에서 I
까지 루프 -
루프 내에서 if (s[i] =='a'), 그렇다면 a의 값을 증가시킵니다.
-
그렇지 않으면 (s[i] =='b')인지 확인하고, true이면 (a> 0)인지 다시 확인합니다. 두 조건이 모두 참이면 의 값을 1 감소시키고 ab의 값을 증가시킵니다.
-
마지막으로 (s[i] =='c')인지 확인하고, true이면 (ab> 0)인지 다시 확인합니다. 두 조건이 모두 참이면 ab 값을 1 감소시키고 abc 값을 증가시킵니다.
-
ABC 반환
예
#include <bits/stdc++.h> using namespace std; int Max(string s){ int i=0, a=0, ab=0, abc=0; for (i = 0; i < s.length(); i++){ if (s[i] == 'a'){ a++; } else if (s[i] == 'b'){ if (a > 0){ a--; ab++; } } else if (s[i] == 'c'){ if (ab > 0){ ab--; abc++; } } } return abc; } //main function int main(){ string s = "zcabcxabc"; cout << Max(s); return 0; }
출력
2