Problem Link
https://www.hackerrank.com/challenges/sherlock-and-anagrams/problem?isFullScreen=true
주어진 문장에서 찾을 수 있는 Anagram들의 모든 짝(pair)을 찾는 문제
def sherlockAndAnagrams(s):
cnt = 0
for k in range(1,len(s)):
tokens = {}
for i in range(len(s)-k+1):
try: tokens[''.join(sorted(s[i:i+k]))] += 1
except: tokens[''.join(sorted(s[i:i+k]))] = 1
for val in tokens.values():
cnt += comb(val, 2)
return cnt
📌 코드 구현 설명
- 모든 Anagram은 길이가 동일하다는 점을 이용
- 길이가 1인 substring 에서 순차적으로 길이를 증가시켜가며 모든 substring을 탐색
- 탐색된 Anagram의 등장 횟수를 딕셔너리(dictionary)에 key값으로 저장
- 딕셔너리에 저장된 등장횟수로 조합(combination) 연산을 하여 총 Anagram 짝(pair) 개수를 셈
딕셔너리에 key값이 없는 경우, 조건문 없이 깔끔하게 코드를 구현하기 위해 try & except 구문을 활용하는 방법을 배울 수 있었다.
try & except 구문 대신 get()을 사용할 수도 있으니 이전 글 참고