숫자 문자열 s가 있다고 가정합니다. 한 쌍의 동일한 문자를 가질 수 있고 나머지 문자열이 동일한 문자의 트리플렛을 여러 개 형성할 수 있는 배열이 있는지 확인해야 합니다.
따라서 입력이 s ="21133123"과 같으면 출력은 True가 됩니다. 왜냐하면 "22"는 쌍으로, "111", "333"은 두 개의 삼중항을 형성하기 위해 2개의 2가 있기 때문입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
d :=s에 있는 각 요소의 빈도를 포함하는 목록
-
d의 각 k에 대해 수행
-
d[k] :=d[k] - 2
-
d[i] mod 3이 d의 모든 i에 대해 0이면
-
참을 반환
-
-
d[k] :=d[k] + 2
-
-
거짓을 반환
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
from collections import Counter def solve(s): d = Counter(s) for k in d: d[k] -= 2 if all(d[i] % 3 == 0 for i in d): return True d[k] += 2 return False s = "21133123" print(solve(s))
입력
"21133123"
출력
True