"ab"를 포함할 수 있는 문자열이 제공되고 작업은 문자열에서 "ab"를 제거하거나 삭제하는 데 필요한 작업 수를 계산하는 것입니다. 따라서 우리의 임무는 문자열에 "ab"가 포함되어 있는지 여부를 먼저 확인하는 것입니다. 그렇다면 "ab" 문자열을 자유로이 만들어야 합니다.
입력 - 문자열 str ="아바바"
출력 − 이진 문자열 "ab"를 비어 있게 하는 작업의 수는 − 4
입니다.설명 − 문자열에서 볼 수 있듯이 "ab" 패턴이 두 번 발생하므로 "ab"를 "bba"로 대체하여 연산 횟수가 1이고 이제 문자열이 bbaabaa가 됩니다. 다시 "ab"를 "bba"로 교체하여 연산 수가 2이고 이제 문자열이 bbabbaaa가 됩니다. "ab"가 하나 더 있으므로 연산 횟수는 3이고 이제 문자열은 bbabbaaa입니다. 검사된 "ab"를 "bba"로 계속 교체함에 따라 문자열은 "ab"가 없어집니다.
입력 - str ="아바"
출력 − 이진 문자열 "ab"를 비우기 위한 작업의 수는 − 1
입니다.설명 − 문자열에서 볼 수 있듯이 "ab" 패턴은 한 번 발생하므로 "ab"를 "bba"로 교체하여 작업 횟수가 1이고 이제 문자열이 bbaaa가 됩니다. 이제 문자열은 "ab"가 없고 개수는 1입니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
문자열을 입력하고 문자열의 길이를 계산하고 추가 처리를 위해 데이터를 함수에 전달합니다.
-
문자열 "ab"를 해제하는 데 필요한 작업을 저장하기 위해 임시 변수 개수를 선언합니다.
-
string 길이 + 1
크기의 문자 배열을 만듭니다. -
strcpy() 메서드를 사용하여 문자열의 문자를 배열에 저장합니다.
-
0부터 문자열 길이까지 FOR 루프 시작
-
루프 내부에서 IF arr[length - i - 1] ='a'를 확인한 다음 count를 count + 0으로 설정하고 total 변수를 total * 2로 설정
-
그렇지 않으면 합계에 대한 개수를 1만큼 증가시킵니다.
-
개수 반환
-
결과를 인쇄하십시오.
예시
#include<bits/stdc++.h> using namespace std; int operations_ab_free(string str, int len){ int count = 0; char arr[length + 1]; strcpy(arr, str.c_str()); int total = 0; for (int i = 0; i < len; i++){ if (arr[len - i - 1] == 'a'){ count = (count + total); total = (total * 2); } else{ total++; } } return count; } int main(){ string str = "ababaa"; int length = str.length(); cout<<"Count of operations to make a binary string “ab” free are: "<<operations_ab_free(str, length)<<endl; return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다 -
Count of operations to make a binary string “ab” free are: 4