>백엔드 개발 >C++ >이진 문자열의 1과 0을 서로 다른 절반으로 분리

이진 문자열의 1과 0을 서로 다른 절반으로 분리

王林
王林앞으로
2023-08-27 16:45:04828검색

이진 문자열의 1과 0을 서로 다른 절반으로 분리

이 튜토리얼에서는 주어진 이진 문자열의 모든 1과 0을 두 부분으로 나누어야 합니다. 여기서는 주어진 문자열에서 하위 문자열을 가져와 이를 뒤집어 0과 1의 다른 부분을 분리해야 합니다. 궁극적으로 우리는 부분 문자열이 1과 0을 반으로 나누는 데 필요한 총 반전 횟수를 계산해야 합니다.

문제 설명 - 짝수 길이의 이진 문자열이 제공됩니다. 주어진 문자열에서 부분 문자열을 여러 번 가져와서 뒤집어 두 부분으로 나누어야 합니다. 마지막에 필요한 반전의 총 개수를 인쇄해야 합니다.

으아악 으아악

지침

문자열이 반으로 나뉘기 때문에 반전이 0번 필요합니다.

으아악 으아악

지침

  • 먼저 5번째 인덱스부터 길이가 2인 부분 문자열을 가져와서 역으로 바꿔보세요. 결과 문자열은 0011110000이 됩니다.

  • 이후 길이 6의 문자열을 처음부터 가져와서 뒤집어 보세요. 결과 문자열은 1111000000

  • 입니다.
으아악 으아악

지침

  • 첫 번째 인덱스부터 시작하여 길이가 2인 문자열을 뒤집습니다. 결과 문자열은 001101이 됩니다.

  • 이제 두 번째 인덱스부터 길이가 3인 문자열을 뒤집어 보겠습니다. 최종 문자열은 000111입니다.

방법 1

이 방법은 고유한 인접 요소의 총 개수를 계산합니다. 그 후에 필요한 총 반전 횟수는 count / 2라고 말할 수 있습니다.

샘플 입력을 디버깅하여 이해해 봅시다.

으아악

그러므로 서로 다른 인접 요소의 총 개수는 4개입니다. 여기서는 str[1] != str[2], str[4] != str[5], str[5] != str[6] 및 str[6] != str[7]입니다.

즉, count 값은 4이고 답은 count/2, 즉 2입니다.

알고리즘

  • 1단계 - "cnt" 변수를 0으로 초기화합니다.

  • 2단계 - for 루프를 사용하고 문자열을 반복합니다.

  • 3단계 − for 루프에서 현재 요소가 이전 요소와 같지 않으면 'cnt' 변수의 값을 1만큼 늘립니다.

  • 4단계 − 'cnt' 값이 홀수이면 (cnt -1) /2를 반환합니다. 그렇지 않으면 cnt/2를 반환합니다.

Example

의 중국어 번역은

Example

입니다. 으아악

출력

으아악

시간 복잡도 - 문자열을 반복하므로 O(N)입니다.

공간 복잡도 - O(N) 왜냐하면 개수를 저장하기 위해 일정한 공간을 사용하기 때문입니다.

여기에서는 두 개의 서로 다른 인접한 요소가 발견될 때마다 반전되어야 하는 논리를 사용했습니다. 또한 단일 역방향 연산으로 두 개의 요소를 설정할 수 있으므로 결과 값으로 count/2를 반환합니다.

위 내용은 이진 문자열의 1과 0을 서로 다른 절반으로 분리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제