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

Python을 사용하여 문자열을 분할하는 여러 가지 좋은 방법을 찾는 프로그램

<시간/>

문자열 s가 있다고 가정합니다. 이제 분할은 s를 2개의 비어 있지 않은 문자열 p와 q로 나눌 수 있을 때 좋은 분할이라고 합니다. 우리는 s에서 할 수 있는 좋은 스플릿의 수를 찾아야 합니다.

따라서 입력이 s ="xxzxyx"와 같으면 여러 분할 방법이 있으므로 출력은 2가 됩니다. 그러나 ("xxz", "xyx") 또는 ("xxzx", "yx")와 같이 분할하면 그러면 그들은 좋습니다.

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

  • 결과 :=0

  • 왼쪽 :=항목의 빈도를 계산하는 빈 mal

  • right :=s에 있는 각 문자의 빈도를 계산합니다.

  • s의 각 c에 대해

    • 왼쪽[c] :=왼쪽[c] + 1

    • 오른쪽[c] :=오른쪽[c] - 1

    • right[c]가 0이면

      • 오른쪽 제거[c]

    • 왼쪽의 크기가 오른쪽의 크기와 같으면

      • 결과 :=결과 + 1

  • 반환 결과

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

from collections import Counter
def solve(s):
   result = 0
   left, right = Counter(), Counter(s)
   for c in s:
      left[c] += 1
      right[c] -= 1
      if not right[c]:
         del right[c]
      if len(left) == len(right):
         result += 1
   return result
s = "xxzxyx"
print(solve(s))

입력

"xxzxyx"

출력

2