[HackerRank] Sherlock and Anagrams - Python3 풀이 (String, Medium)

leehyuna·2022년 5월 1일
0

코딩테스트

목록 보기
7/8
post-thumbnail
  • 문제 설명 🤓
    주어진 문자열의 substring 중 anagram 관계인 anagrammatic pairs의 개수 구하는 문제

  • 나의 풀이 포인트 📌
    (1) 문자열 맨 앞에서부터 substring 길이 별로 계산 <- 마지막 sample을 보고 아이디어 생각
    (2) dictionary를 만들어 substring의 출현 빈도를 저장

  • 알아둘 것 ⭐️
    (1) Anagram

    • Anagram이란, 한 단어를 구성하는 글자의 개수를 그대로 유지하면서 순서만 바꾼 단어이다. (ex. listen <-> silent)

    • 따라서, Anagram을 판별하기 위해서는 주로 정렬을 사용한다.
      정렬한 문자열이 같으면 anagram이다!

      (정렬 외에도 anagram을 판별하는 방법은 여러가지가 있다.
      아래 포스트가 잘 설명하고 있으니 참고! https://shoark7.github.io/programming/algorithm/several-ways-to-solve-anagram-in-python )

  • 코드

def sherlockAndAnagrams(s):
    TOTAL = 0
    ana_dict = {}
    for leng in range(1, len(s)) :
        for i in range(len(s)-leng+1) :
            sub = ''.join(sorted(s[i:i+leng]))
            if sub in ana_dict.keys() :
                TOTAL += ana_dict[sub]
                ana_dict[sub] += 1
            else :
                ana_dict[sub] = 1
                
    return TOTAL
    
profile

0개의 댓글