문자열 s가 있다고 가정하고 모든 문자를 사용하여 생성할 수 있는 고유한 회문의 수를 찾아야 합니다. 답이 매우 크면 결과를 10^9 + 7로 수정합니다.
따라서 입력이 s ="xyzzy"와 같으면 "zyxyz" 및 "yzxzy"를 만들 수 있으므로 출력은 2가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
m =10^9+7
-
char_freq :=s의 각 문자와 그 빈도를 담고 있는 지도
-
홀수 :=0
-
char_freq의 각 문자 k 및 빈도 v에 대해 수행
-
v mod 2가 1이면
-
홀수 :=홀수 + 1
-
-
-
홀수> 1이면
-
0 반환
-
-
half_length :=(s의 크기)의 몫 / 2
-
res :=half_length의 계승
-
제수 :=1
-
char_freq의 각 문자 k 및 빈도 v에 대해 수행
-
제수 :=제수 * 계승(v/2의 몫)
-
-
반환(res/dividor의 몫) mod m
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from math import factorial class Solution: def solve(self, s): m = (10**9+7) char_freq = {} for c in s: char_freq[c] = char_freq.get(c, 0) + 1 odd = 0 for k,v in char_freq.items(): if v % 2 == 1: odd +=1 if odd > 1: return 0 half_length = len(s)//2 res = factorial(half_length) dividor = 1 for k,v in char_freq.items(): dividor *= factorial(v//2) return (res//dividor) % m ob = Solution() print(ob.solve("xyzzy"))
입력
"xyzzy"
출력
2