소문자 문자열이 있다고 가정합니다. 우리는 문자열을 중간에서 분할할 수 있는지 확인해야 합니다. 그러면 두 쪽 사이에 최소한 한 문자 차이가 있는 두 개의 반쪽이 제공됩니다. 다른 문자 또는 각 문자의 빈도가 다를 수 있습니다. 문자열이 홀수 길이의 문자열이면 중간 요소를 무시하고 나머지 요소를 확인하십시오.
따라서 입력이 s ="helloohekk"와 같으면 출력은 "helloohekk"로 True이므로 왼쪽 부분은 "hello" 오른쪽 부분은 "ohekk" 왼쪽과 오른쪽이 다릅니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- left_freq :=빈 지도
- right_freq :=빈 지도
- n :=s의 크기
- 0에서 (n/2) - 1의 몫 범위에 있는 i에 대해
- left_freq[s[i]] :=left_freq[s[i]] + 1
- (n/2) ~ n - 1의 범위 몫에 있는 i에 대해
- right_freq[s[i]] :=right_freq[s[i]] + 1
- s의 각 문자에 대해 다음을 수행합니다.
- right_freq[char]가 left_freq[char]와 같지 않으면
- 참 반환
- right_freq[char]가 left_freq[char]와 같지 않으면
- 거짓을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from collections import defaultdict def solve(s): left_freq = defaultdict(int) right_freq = defaultdict(int) n = len(s) for i in range(n//2): left_freq[s[i]] += 1 for i in range(n//2, n): right_freq[s[i]] += 1 for char in s: if right_freq[char] != left_freq[char]: return True return False s = "helloohekk" print(solve(s))
입력
"helloohekk"
출력
True