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