Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 변경 후 최대 바이너리 문자열을 찾는 프로그램

<시간/>

바이너리 문자열이 있다고 가정합니다. 다음 작업을 몇 번이든 적용할 수 있습니다. −

  • 숫자에 하위 문자열 "00"이 포함되어 있으면 "10"으로 바꿀 수 있습니다.

  • 숫자에 하위 문자열 "10"이 포함되어 있으면 "01"로 바꿀 수 있습니다.

그런 다음 우리는 연산 횟수에 관계없이 얻을 수 있는 최대 바이너리(숫자 값 기반) 문자열을 찾아야 합니다.

따라서 입력이 s ="001100"과 같으면 출력은 111011이 됩니다. 왜냐하면 (00)1100 -> 101(10)0 -> 1010(10) -> 10(10)01 -> 100(10)1 -> 1(00)011 -> 111011.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 길이 :=s의 크기
  • 0 :=s의 0 개수
  • 0 <2이면
    • 반환
  • s :=s의 왼쪽에서 모든 '1' 제거
  • lead_ones :=길이 - s의 크기
  • leading_ones :=leading_ones + 0 - 1
  • trailing_ones :=길이 -leading_ones - 1
  • answer_left :=1의 선행_일 수
  • answer_right :=후행_1의 수
  • answer_left 연결 0 answer_right 연결 및 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(s):
   length = len(s)
   zeros = s.count('0')
   if zeros < 2:
      return s
   s = s.lstrip('1')
   leading_ones = length - len(s)
   leading_ones += zeros - 1
   trailing_ones = length - leading_ones - 1
   answer_left = '1' * leading_ones
   answer_right = '1' * trailing_ones
   return ''.join([answer_left, '0', answer_right])

s = "001100"
print(solve(s))

입력

"001100"

출력

111011