DEV Community

tracelit
tracelit

Posted on • Originally published at tracelit.dev

LeetCode 567: Permutation In String — Step-by-Step Visual Trace

Medium — Sliding Window | Hash Table | String | Two Pointers

The Problem

Given two strings s1 and s2, return true if s2 contains a permutation of s1. A permutation is a rearrangement of characters, so we need to find if any substring of s2 has the same character frequencies as s1.

Approach

Use a sliding window technique with two hash maps to track character frequencies. Maintain a window of size len(s1) in s2, comparing the character frequency of the current window with s1's frequency map. Slide the window by adding the right character and removing the left character.

Time: O(n) · Space: O(k)

Code

class Solution:
    def checkInclusion(self, s1: str, s2: str) -> bool:
        if len(s1) > len(s2):
            return False

        char_freq_s1 = {}
        for char in s1:
            char_freq_s1[char] = char_freq_s1.get(char, 0) + 1

        left, right = 0, 0
        char_freq_temp = {}

        while right < len(s2):
            char_freq_temp[s2[right]] = char_freq_temp.get(s2[right], 0) + 1

            if right - left + 1 == len(s1):
                if char_freq_temp == char_freq_s1:
                    return True
                char_freq_temp[s2[left]] -= 1
                if char_freq_temp[s2[left]] == 0:
                    del char_freq_temp[s2[left]]
                left += 1

            right += 1

        return False
Enter fullscreen mode Exit fullscreen mode

Watch It Run

TraceLit — See exactly where your code breaks

Paste your LeetCode solution and see every pointer, variable, and data structure update step by step.

favicon tracelit.dev

Open interactive visualization

Try it yourself: Open TraceLit and step through every line.


Built with TraceLit — the visual algorithm tracer for LeetCode practice.

Top comments (0)