// Lightweight LeetCode problem -> DSA pattern classifier. export const PATTERN_KEYWORDS: [string, string][] = [ ['two sum', 'Arrays & Hashing'], ['hash', 'Arrays & Hashing'], ['anagram', 'Arrays & Hashing'], ['duplicate', 'Arrays & Hashing'], ['contains', 'Arrays & Hashing'], ['group', 'Arrays & Hashing'], ['array', 'Arrays & Hashing'], ['interval', 'Intervals'], ['meeting', 'Intervals'], ['slots', 'Intervals'], ['skyline', 'Intervals'], ['two pointers', 'Two Pointers'], ['palindrome', 'Two Pointers'], ['three sum', 'Two Pointers'], ['3sum', 'Two Pointers'], ['container', 'Two Pointers'], ['sliding window', 'Sliding Window'], ['substring', 'Sliding Window'], ['subarray', 'Sliding Window'], ['stack', 'Stack'], ['parentheses', 'Stack'], ['binary search', 'Binary Search'], ['binary', 'Binary Search'], ['search in', 'Binary Search'], ['koko', 'Binary Search'], ['median', 'Binary Search'], ['sqrt', 'Binary Search'], ['linked list', 'Linked List'], ['remove nth', 'Linked List'], ['merge two', 'Linked List'], ['reverse', 'Linked List'], ['cycle', 'Linked List'], ['binary tree', 'Trees'], ['inorder', 'Trees'], ['preorder', 'Trees'], ['level order', 'Trees'], ['max depth', 'Trees'], ['lowest common', 'Trees'], ['tree', 'Trees'], ['bst', 'Trees'], ['graph', 'Graphs'], ['course schedule', 'Graphs'], ['number of islands', 'Graphs'], ['island', 'Graphs'], ['topological', 'Graphs'], ['word ladder', 'Graphs'], ['heap', 'Heaps'], ['priority', 'Heaps'], ['kth largest', 'Heaps'], ['top k', 'Heaps'], ['backtracking', 'Backtracking'], ['combination', 'Backtracking'], ['permutation', 'Backtracking'], ['subsets', 'Backtracking'], ['letter combinations', 'Backtracking'], ['dynamic programming', 'Dynamic Programming'], [' dp ', 'Dynamic Programming'], ['coin change', 'Dynamic Programming'], ['house robber', 'Dynamic Programming'], ['climbing stairs', 'Dynamic Programming'], ['unique paths', 'Dynamic Programming'], ['word break', 'Dynamic Programming'], ['longest', 'Dynamic Programming'], ['edit distance', 'Dynamic Programming'], ['regex', 'Dynamic Programming'], ['wildcard', 'Dynamic Programming'], ['decode', 'Dynamic Programming'], ['partition equal', 'Dynamic Programming'], ['subsequence', 'Dynamic Programming'], ['paint house', 'Dynamic Programming'], ['trie', 'Trie'], ['prefix', 'Trie'], ['implement trie', 'Trie'], ['bit', 'Bit Manipulation'], ['xor', 'Bit Manipulation'], ['missing number', 'Bit Manipulation'], ['string to integer', 'Math'], ['reverse integer', 'Math'], ['pow', 'Math'], ['math', 'Math'], ['sqrt', 'Math'], ['lru', 'Design'], ['design', 'Design'], ['min stack', 'Design'], ['serialize', 'Design'], ['union find', 'Union Find'], ['redundant', 'Union Find'], ['alien', 'Union Find'], ['greedy', 'Greedy'], ['jump game', 'Greedy'], ['best time', 'Greedy'], ['maximum subarray', 'Greedy'], ['divid', 'Divide & Conquer'], ['sort an array', 'Sorting'], ['merge sorted', 'Sorting'], ['k closest', 'Heaps'], ['k smallest', 'Heaps'], ['k nearest', 'Heaps'], ['find k', 'Heaps'], ['top k', 'Heaps'], ['matrix', 'Matrix'], ['rotate', 'Matrix'], ['spiral', 'Matrix'], ['sudoku', 'Matrix'], ['set matrix', 'Matrix'], ]; export function classifyPattern(title: string): string { const lower = ` ${title.toLowerCase()} `; for (const [kw, pattern] of PATTERN_KEYWORDS) { if (lower.includes(` ${kw} `) || lower.includes(kw)) return pattern; } return 'Core Algorithms'; }