문자열 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