본문 바로가기

두두의 알고리즘/문제

[해시] 릿코드 438 Medium 'Find All Anagrams in a String' (Python)

728x90

<문제 링크>

https://leetcode.com/problems/find-all-anagrams-in-a-string/

 

Find All Anagrams in a String - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com


<문제 풀이>

1. 순서 상관 없이 s 안에 연속으로 p의 문자열이 나열되어 있다면 첫번째 인덱스를 반환한다.

2. 순서가 상관이 없으므로 Counter 라이브러리 사용

3. 시간복잡도를 효율적으로 사용하기 위해 여러 변수를 선언해둠

 

<코드>

from collections import Counter
class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        lens = len(s)
        lenp = len(p)
        Cp = Counter(p)
        answer = []
        
        for i in range(lens-lenp+1):
            if Counter(s[i:i+lenp]) == Cp:
                answer.append(i)
                
        return answer

 

<고쳐야 할 점>

  • len(s), Counter(p) 이런거를 변수로 바꾸고 사용해야 시간 효율성이 좋아짐