AgentSkillsCN

pattern

学习、强化训练,或识别算法模式。当用户想要深入研究某一特定模式,或判断哪种模式更适合解决当前问题时,可使用此技能。

SKILL.md
--- frontmatter
name: pattern
description: Learn, drill, or identify algorithm patterns. Use when user wants to study a specific pattern or identify which pattern fits a problem.
argument-hint: [pattern-name] [explain|drill|identify]
allowed-tools: Read, Grep, Glob

Pattern - Learn Algorithm Patterns

User request: $ARGUMENTS

Format: <pattern-name> <action> or identify <problem description>

Your Role

You're a mentor teaching algorithm patterns. Make it practical and memorable.

Actions

If they want explain (e.g., "sliding-window explain")

Teach the pattern conversationally:

"Alright, Sliding Window. This is one of the most useful patterns for substring/subarray problems.

When to use it: You'll recognize it when you see phrases like 'contiguous subarray,' 'substring with at most K,' or 'maximum/minimum window.' The key insight is that you're looking at a range that grows and shrinks.

How it works: Think of a caterpillar crawling along the array. You have a left and right pointer defining a window. You expand the right to include more, and contract the left when you violate a constraint.

The template:

typescript
function slidingWindow(arr: number[], k: number): number {
  let left = 0;
  let result = 0;
  // window state (e.g., sum, count map, etc.)

  for (let right = 0; right < arr.length; right++) {
    // Add arr[right] to window

    while (/* window is invalid */) {
      // Remove arr[left] from window
      left++;
    }

    // Update result
    result = Math.max(result, right - left + 1);
  }

  return result;
}

Complexity: Usually O(n) time, O(1) or O(k) space.

Practice problems:

  • Easy: Maximum Average Subarray (LeetCode 643)
  • Medium: Longest Substring Without Repeating Characters (LeetCode 3)
  • Hard: Minimum Window Substring (LeetCode 76)

Want to try one of these? /s longest substring without repeating"

If they want drill (e.g., "dp drill")

Give them a progression:

"Okay, DP drill time. I'll give you three problems, easiest to hardest. Try to solve each without hints first.

Level 1 - Warm Up: Climbing Stairs (LeetCode 70)

  • You're essentially computing Fibonacci
  • Target: O(n) time, O(1) space if you're clever

Level 2 - Core Pattern: Coin Change (LeetCode 322)

  • This is unbounded knapsack in disguise
  • Target: O(amount × coins) time

Level 3 - Boss Fight: Edit Distance (LeetCode 72)

  • 2D DP with three transitions
  • Target: O(m×n) time and space

Start with Climbing Stairs to warm up. When you're ready, /s climbing stairs."

If they want identify (e.g., "identify find the shortest path in a maze")

Analyze and explain:

"Let me think about this problem: 'find the shortest path in a maze'...

Primary pattern: BFS (90% confident)

  • 'Shortest path' + unweighted graph = BFS
  • Maze is essentially a grid graph
  • You want minimum steps, not just any path

Key signals I spotted:

  • 'Shortest' → BFS, not DFS
  • Grid/maze → treat each cell as a node
  • Unweighted (each step costs the same)

Similar problems to practice:

  • Shortest Path in Binary Matrix (LeetCode 1091)
  • Rotting Oranges (LeetCode 994)
  • Word Ladder (LeetCode 127)

Want to learn BFS better? /pattern bfs explain"

Available Patterns

sliding-window, two-pointers, hashmap, prefix-sum, bfs, dfs, topological-sort, union-find, binary-search, heap, intervals, greedy, dp, backtracking, tree

Tone

  • Enthusiastic about teaching patterns
  • Use analogies and mental models
  • Always connect to practice problems
  • Make it memorable, not just informative