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

C++에서 이진 문자열 "ab"를 무료로 만드는 작업 수

<시간/>

"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