Solve it once. Keep it solved.

Solved it last month, blanked on it today? Take down LeetCode one problem at a time, and make every one stick.

Accepted · Two SumReview 1
Next reviewease 2.60
—rate it to schedule
Your ratings so far0 reviews
  • None yet
On reviewCode blur
Hide my old solution

It works where you solve

Nothing to copy or log. Submit on leetcode.com as you always do, and AnkLeet shows up beside the editor at the moment it is useful.

Accepted
Longest Substring Without Repeating Characters

How hard was it to solve? Your rating sets the next review.

Don't review this problemRate later
Not accepted
Coin Change

A hint asks a question about your code; the solution explains the whole approach.

Get a hintShow the solution
Your loop tries each coin once per amount. What happens to dp[11] if the best way to make 11 uses the same coin three times?
AI tutorTop K Frequent Elements
New chat
Why is bucket sort O(n) here and not O(n log n)?
A count can't exceed n, so you only need n + 1 buckets. One pass fills them, one pass reads them from the top until you have k items. Nothing is compared, so there's no log factor.
And when would a heap be better?
Ask about this problem…Send
Python3Group Anagrams
class Solution:
    def groupAnagrams(self, strs):
        groups = defaultdict(list)
        for s in strs:
            key = [0] * 26
            for ch in s:
                key[ord(ch) - ord('a')] += 1
            groups[tuple(key)].append(s)
        return list(groups.values())
Your last solution is hidden

Reset the editor and solve it from scratch. Reveal it only if you get stuck.

Rated GoodNext review in 7 days

Rate it the moment it passes

Every accepted submission opens a four-button rating. Each button shows the gap it will schedule, so you pick the next review, not an abstract grade.

1 of 5

Reviews measured in days

Flashcard apps reschedule in minutes because a card takes seconds. A LeetCode problem takes twenty minutes, so AnkLeet starts at a day and grows from there.

The first time you rate a problem

  • Again1 day
  • Hard3 days
  • Good7 days
  • Easy14 days

Every review after that

  • Againback to 1 day, ease −0.20
  • Hardinterval × 1.5, ease −0.15
  • Goodinterval × ease
  • Easyinterval × ease × 1.5, ease +0.20

Rated Good every time, from today

  • First reviewin 7 days
  • Second18 days later
  • Third47 days later
  • Fourth122 days later

How much of a problem you can still solve

  • Reviewed with AnkLeet, rated Good
  • Solved once, never reviewed

A model, not measured data: memory fades exponentially, and each review makes it fade more slowly by the card's ease factor (2.6).

Fewer reviews each time you remember

Days until the next review, rated Good each time

These gaps come from AnkLeet's scheduler. Four reviews cover more than six months.

Install it from source

AnkLeet isn't on the Chrome Web Store yet. It's plain JavaScript with no build step, so you clone it and load the folder.

Open the repository
  1. First, clone the repository.

    git clone https://github.com/sumiyuan/ankleet.git
    Cloning into 'ankleet'...
    ankleet/
    ├── manifest.json
    ├── background.js
    ├── content-*.js
    ├── popup.html / .js / .css
    ├── fonts/
    └── icons/
  2. Then load it in Chrome.

    Open the extensions page, switch on Developer mode at the top right, click Load unpacked and choose the ankleet folder.

    chrome://extensions
    The AnkLeet icon
    AnkLeet 1.2.0

    Automatically track every LeetCode submission

    Loaded from ~/ankleet
  3. Add an AI key, if you want the tutor.

    Click the AnkLeet icon, open Settings and paste a key from openrouter.ai/keys. Without one, everything except hints and chat still works.

    AI tutor

    ••••••••••••••••••••

    It never leaves this browser except to call OpenRouter.

    Claude Haiku 4.5 (fast, cheap)⌄
    SaveSaved
  4. Now go and solve a problem.

    Submit anything on leetcode.com/problems. When it passes, this is waiting for you.

    class Solution:
        def maxProfit(self, prices):
            lowest, best = prices[0], 0
            for p in prices[1:]:
                best = max(best, p - lowest)
                lowest = min(lowest, p)
            return best
    
    # Accepted · Runtime 52 ms · Beats 91.4%
    Accepted
    Best Time to Buy and Sell Stock

    How hard was it to solve? Your rating sets the next review.

    Don't review this problemRate later

Questions people ask

  • No. AnkLeet is free and MIT licensed. The AI tutor uses your own OpenRouter key, so you pay OpenRouter a few cents for what you use, and nothing if you skip it.

AnkLeet

Install it now