Coding Test/알고리즘 이론

문자열 탐색|| (65)

hyunkookim 2025. 1. 8. 16:40

슬라이딩 윈도우 문제

Easy

  1. Maximum Average Subarray I (LeetCode 643)
    설명: 고정 크기 윈도우의 평균 값 중 최대값을 찾습니다.
    핵심 개념: 슬라이딩 윈도우.
  2. Find All Anagrams in a String (LeetCode 438)
    설명: 문자열에서 모든 애너그램의 시작 인덱스를 찾습니다.
    핵심 개념: 슬라이딩 윈도우, 해시맵.
  3. Contains Duplicate II (LeetCode 219)
    설명: 배열에서 특정 거리 내에서 중복값이 존재하는지 확인합니다.
    핵심 개념: 슬라이딩 윈도우, 해시맵.
  4. Longest Substring Without Repeating Characters (LeetCode 3)
    설명: 중복 없는 가장 긴 부분 문자열을 찾습니다.
    핵심 개념: 슬라이딩 윈도우, 투 포인터.
  5. Minimum Size Subarray Sum (LeetCode 209)
    설명: 합이 특정 값 이상이 되는 최소 크기의 부분 배열을 찾습니다.
    핵심 개념: 슬라이딩 윈도우, 투 포인터.
  6. Find Pivot Index (LeetCode 724)
    설명: 배열에서 왼쪽과 오른쪽 합이 같은 인덱스를 찾습니다.
    핵심 개념: 슬라이딩 윈도우, prefix sum.
  7. Substrings of Size Three with Distinct Characters (LeetCode 1876)
    설명: 고정 크기 3의 윈도우에서 모든 문자가 서로 다른 부분 문자열의 개수를 셉니다.
    핵심 개념: 슬라이딩 윈도우, 해시맵.
  8. Reverse Prefix of Word (LeetCode 2000)
    설명: 특정 문자까지의 문자열 접두사를 뒤집습니다.
    핵심 개념: 슬라이딩 윈도우.
  9. Replace Elements with Greatest Element on Right Side (LeetCode 1299)
  10. Check If All Characters Have Equal Frequency (LeetCode 2423)
  11. Find Subarrays With Equal Sum (LeetCode 2395)
  12. Find Pivot Index (LeetCode 724)
  13. Can Place Flowers (LeetCode 605)

Medium

  1. Subarray Product Less Than K (LeetCode 713)
    설명: 곱이 K보다 작은 부분 배열의 개수를 구합니다.
    핵심 개념: 슬라이딩 윈도우, 곱셈.
  2. Permutation in String (LeetCode 567)
    설명: 문자열의 순열이 다른 문자열에 포함되는지 확인합니다.
    핵심 개념: 슬라이딩 윈도우, 해시맵.
  3. Longest Repeating Character Replacement (LeetCode 424)
    설명: 특정 문자를 교체하여 가장 긴 반복 문자열을 만듭니다.
    핵심 개념: 슬라이딩 윈도우, 투 포인터.
  4. Fruit Into Baskets (LeetCode 904)
    설명: 두 종류의 과일만 포함하는 가장 긴 부분 배열을 찾습니다.
    핵심 개념: 슬라이딩 윈도우, 해시맵.
  5. Sliding Window Maximum (LeetCode 239)
    설명: 고정 크기 윈도우에서 최대값을 찾습니다.
    핵심 개념: 슬라이딩 윈도우, 덱.
  6. Grumpy Bookstore Owner (LeetCode 1052)
    설명: 고객이 화를 내는 시간을 조절하여 최대 매출을 계산합니다.
    핵심 개념: 슬라이딩 윈도우.
  7. Max Consecutive Ones III (LeetCode 1004)
    설명: 최대 K개의 0을 뒤집어 1의 연속 배열 길이를 최대화합니다.
    핵심 개념: 슬라이딩 윈도우, 투 포인터.
  8. Minimum Size Subarray Sum (LeetCode 209)
    설명: 합이 특정 값 이상이 되는 최소 크기의 부분 배열을 찾습니다.
    핵심 개념: 슬라이딩 윈도우, 투 포인터.
  9. Grumpy Bookstore Owner (LeetCode 1052)
  10. Binary Subarrays With Sum (LeetCode 930)
  11. Longest Substring with At Most Two Distinct Characters (LeetCode 159)
  12. Substrings of Size Three with Distinct Characters (LeetCode 1876)

RabinKarp 문자열 탐색 문제

Easy

  1. Implement strStr() (LeetCode 28)
    설명: 문자열에서 특정 패턴의 시작 인덱스를 찾습니다.
    핵심 개념: Rabin-Karp 알고리즘.
  2. Repeated Substring Pattern (LeetCode 459)
    설명: 문자열이 반복되는 패턴으로 구성되어 있는지 확인합니다.
    핵심 개념: Rabin-Karp, 문자열 해싱.
  3. Find the Difference (LeetCode 389)
    설명: 두 문자열의 차이점을 찾습니다.
    핵심 개념: Rabin-Karp, 해싱.
  4. Reverse Prefix of Word (LeetCode 2000)

Medium

  1. Longest Duplicate Substring (LeetCode 1044)
    설명: 문자열에서 가장 긴 중복된 부분 문자열을 찾습니다.
    핵심 개념: Rabin-Karp, 롤링 해시, 이진 탐색.
  2. Substring with Concatenation of All Words (LeetCode 30)
    설명: 문자열에서 모든 단어의 순열로 이루어진 부분 문자열의 시작 인덱스를 찾습니다.
    핵심 개념: Rabin-Karp, 슬라이딩 윈도우.
  3. Check If a String Contains All Binary Codes of Size K (LeetCode 1461)
    설명: 문자열에 특정 길이 K의 모든 이진 문자열이 포함되어 있는지 확인합니다.
    핵심 개념: Rabin-Karp, 해싱.
  4. Minimum Window Substring (LeetCode 76)
    설명: 문자열에서 특정 패턴을 포함하는 가장 짧은 부분 문자열을 찾습니다.
    핵심 개념: Rabin-Karp, 슬라이딩 윈도우.
  5. Smallest Subsequence of Distinct Characters (LeetCode 1081)
  6. Count Unique Characters of All Substrings of a Given String (LeetCode 828)

롤링 해시 (Rolling Hash) 문제

Easy

  1. Find All Anagrams in a String (LeetCode 438)
    설명: 문자열에서 모든 애너그램의 시작 인덱스를 찾습니다.
    핵심 개념: 롤링 해시, 슬라이딩 윈도우.
  2. Find the Difference (LeetCode 389)
    설명: 두 문자열의 차이점을 찾습니다.
    핵심 개념: 롤링 해시.
  3. Is Subsequence (LeetCode 392)
    설명: 문자열이 다른 문자열의 부분 순서인지 확인합니다.
    핵심 개념: 롤링 해시, 해싱.
  4. Check If a String Contains All Binary Codes of Size K (LeetCode 1461)

Medium

  1. Longest Duplicate Substring (LeetCode 1044)
    설명: 문자열에서 가장 긴 중복된 부분 문자열을 찾습니다.
    핵심 개념: 롤링 해시, 이진 탐색.
  2. Check If a String Contains All Binary Codes of Size K (LeetCode 1461)
    설명: 문자열에 특정 길이 K의 모든 이진 문자열이 포함되어 있는지 확인합니다.
    핵심 개념: 롤링 해시.
  3. Count Unique Characters of All Substrings of a Given String (LeetCode 828)
    설명: 주어진 문자열의 모든 부분 문자열에서 고유 문자의 개수를 계산합니다.
    핵심 개념: 롤링 해시.
  4. Minimum Window Substring (LeetCode 76)
  5. Find All Anagrams in a String (LeetCode 438)
  6. Longest Duplicate Substring (LeetCode 1044)

접미사 배열 (Suffix Arrays) 문제

Easy

  1. Longest Common Prefix (LeetCode 14)
    설명: 문자열 배열에서 가장 긴 공통 접두사를 찾습니다.
    핵심 개념: 접미사 배열, 문자열 탐색.
  2. Shortest Unsorted Continuous Subarray (LeetCode 581)
    설명: 배열을 정렬하여 비정렬 부분 배열의 최소 길이를 찾습니다.
    핵심 개념: 문자열 정렬, 접미사 배열.

Medium

  1. Longest Duplicate Substring (LeetCode 1044)
    설명: 가장 긴 중복된 부분 문자열을 찾습니다.
    핵심 개념: 접미사 배열, 롤링 해시, 이진 탐색.
  2. Count of Smaller Numbers After Self (LeetCode 315)
    설명: 배열에서 각 숫자 뒤에 있는 더 작은 숫자의 개수를 계산합니다.
    핵심 개념: 접미사 배열, 세그먼트 트리.
  3. Distinct Subsequences II (LeetCode 940)
    설명: 주어진 문자열의 고유한 모든 부분 문자열의 수를 찾습니다.
    핵심 개념: 접미사 배열, 동적 프로그래밍.

오토마타를 이용한 문자열 매칭 문제

Medium

  1. Word Search (LeetCode 79)
    설명: 2D 그리드에서 특정 단어를 찾습니다.
    핵심 개념: DFA(Deterministic Finite Automaton), 백트래킹.
  2. Wildcard Matching (LeetCode 44)
    설명: 문자열이 와일드카드 패턴과 일치하는지 확인합니다.
    핵심 개념: 오토마타, 동적 프로그래밍.
  3. Regular Expression Matching (LeetCode 10)
    설명: 문자열이 정규식 패턴과 일치하는지 확인합니다.
    핵심 개념: NFA(Nondeterministic Finite Automaton), DP.

투 포인터 문제

Easy

  1. Two Sum II - Input Array Is Sorted (LeetCode 167)
    설명: 정렬된 배열에서 두 숫자의 합이 목표 값이 되는 인덱스를 찾습니다.
    핵심 개념: 투 포인터.
  2. Reverse String (LeetCode 344)
    설명: 문자열을 뒤집습니다.
    핵심 개념: 투 포인터.
  3. Valid Palindrome (LeetCode 125)
    설명: 문자열이 회문인지 확인합니다.
    핵심 개념: 투 포인터.
  4. Remove Duplicates from Sorted Array (LeetCode 26)
    설명: 정렬된 배열에서 중복을 제거하여 고유 값으로 구성된 배열을 반환합니다.
    핵심 개념: 투 포인터.

Medium

  1. 3Sum (LeetCode 15)
    설명: 배열에서 세 숫자의 합이 0이 되는 모든 조합을 찾습니다.
    핵심 개념: 투 포인터.
  2. Container With Most Water (LeetCode 11)
    설명: 최대 물을 담을 수 있는 두 벽을 찾습니다.
    핵심 개념: 투 포인터.
  3. Partition Labels (LeetCode 763)
    설명: 문자열을 부분으로 나누어 각 부분이 독립적이도록 분리합니다.
    핵심 개념: 투 포인터.
  4. Sort Colors (LeetCode 75)
    설명: 배열을 세 가지 색깔로 정렬합니다.
    핵심 개념: 투 포인터, Dutch National Flag Algorithm.

순진한 문자열 매칭 (Explicit Backup 방식)

Easy

  1. Implement strStr() (LeetCode 28)
    설명: 문자열에서 특정 패턴의 시작 인덱스를 찾습니다.
    핵심 개념: Brute Force, 순진한 문자열 매칭.

Medium

  1. Repeated Substring Pattern (LeetCode 459)
    설명: 문자열이 반복되는 패턴으로 이루어졌는지 확인합니다.
    핵심 개념: 순진한 문자열 매칭, 패턴 탐색.
  2. Substring with Concatenation of All Words (LeetCode 30)
    설명: 모든 단어의 순열이 다른 문자열에 포함되는지 확인합니다.
    핵심 개념: 순진한 문자열 매칭, 슬라이딩 윈도우.

Knuth-Morris-Pratt(KMP) 알고리즘 문제

Easy

  1. Implement strStr() (LeetCode 28)
    설명: KMP 알고리즘을 사용하여 문자열에서 특정 패턴의 시작 인덱스를 찾습니다.
    핵심 개념: KMP, 접두사 함수.
  2. Repeated Substring Pattern (LeetCode 459)
    설명: 문자열이 반복되는 패턴으로 이루어졌는지 확인합니다.
    핵심 개념: KMP, 접두사 배열.

Medium

  1. Minimum Window Substring (LeetCode 76)
    설명: 특정 패턴을 포함하는 가장 짧은 부분 문자열을 찾습니다.
    핵심 개념: KMP, 접두사 배열, 해싱.
  2. Longest Prefix Which Is Also Suffix (LeetCode 1392)
    설명: 접두사와 접미사가 동일한 가장 긴 부분 문자열을 찾습니다.
    핵심 개념: KMP, 접두사 배열.
  3. KMP Algorithm Implementation (Custom Implementation Practice)
    설명: KMP 알고리즘을 직접 구현하여 문자열 매칭 문제를 해결합니다.
    핵심 개념: 접두사 배열, 문자열 매칭.