← Back to blog ZipRecruiter OA Playbook | String Matching + Skill Graph VO Assistance
ZipRecruiter

ZipRecruiter OA Playbook | String Matching + Skill Graph VO Assistance

2026-05-23

ZipRecruiter is one of the largest AI recruiting platforms in the US, with SDE / ML Eng teams split across Matching, Search, Recommendations, and Trust & Safety. OA questions derive from real platform business: JD keyword matching, candidate skill-graph recommendation, text normalization. This playbook plus a VO assistance roadmap.

ZipRecruiter OA Snapshot

Dimension Detail
Platform HackerRank / CoderPad
Duration 60–90 minutes
Questions 2–3 (one is string-heavy)
Difficulty LC Medium
Grading Auto + hidden stress tests

Line 1: JD Keyword Matching

import re

def match_skills(jd, skills):
    norm = jd.lower()
    text = re.sub(r'[^a-z0-9+/# ]', ' ', norm)
    tokens = set(text.split())
    found = []
    for s in skills:
        ks = s.lower()
        ks_alt = ks[:-1] if ks.endswith('s') else ks + 's'
        if ks in tokens or ks_alt in tokens:
            found.append(s)
    return found

Watch for "c++", "c#" — preserve special chars in the regex.

Line 2: Skill-Graph Recommendation

from collections import deque, defaultdict

def min_learn(skills_graph, owned, required, theta):
    adj = defaultdict(list)
    for u, v, w in skills_graph:
        if w >= theta:
            adj[u].append(v)
            adj[v].append(u)

    def closure(seed):
        seen = set(seed)
        q = deque(seed)
        while q:
            x = q.popleft()
            for y in adj[x]:
                if y not in seen:
                    seen.add(y)
                    q.append(y)
        return seen

    have = closure(owned)
    missing = [r for r in required if r not in have]
    learned = 0
    while missing:
        best, best_gain = None, -1
        for s in adj:
            if s in have:
                continue
            gain = len(closure(list(have) + [s]) & set(missing))
            if gain > best_gain:
                best, best_gain = s, gain
        if best is None or best_gain <= 0:
            return -1
        have = closure(list(have) + [best])
        missing = [r for r in required if r not in have]
        learned += 1
    return learned

Brute greedy is O(V² · E) — passes V ≤ 200; advanced variants want set-cover approximation.

Line 3: Text Normalization

import re

PREFIX = {'sr.': 'Senior', 'jr.': 'Junior', 'sr': 'Senior'}

def normalize_title(t):
    t = re.sub(r'\s+', ' ', t.strip())
    parts = re.split(r'[–\-]', t, maxsplit=1)
    head, tail = parts[0].strip(), parts[1].strip() if len(parts) > 1 else ''
    paren = re.findall(r'\(([^)]+)\)', head)
    head_clean = re.sub(r'\s*\([^)]+\)\s*', ' ', head).strip()
    words = head_clean.split()
    out = []
    for w in words:
        out.append(PREFIX.get(w.lower(), w.title()))
    return {
        'title':    ' '.join(out),
        'modifier': [p.strip() for p in paren],
        'location': tail,
    }

High-Frequency Cheat Sheet

Problem Type Frequency Core Pattern
JD keyword matching ★★★★★ regex + set + simple variants
Skill-graph recommend ★★★★ BFS closure + greedy
Resume normalization ★★★★ re.split + dict mapping
Trie autocomplete ★★★ Trie + DFS
LRU / Top-K ★★★ LinkedHashMap / heapq

VO Assistance Path

oavoservice Packages

Add WeChat Coding0201 for pricing.

From Tripping on String Problems to Passing ZipRecruiter OA

We were glad to help this cohort pass the ZipRecruiter SDE OA. Many candidates told us string problems look LC Easy, but ZipRecruiter's hidden tests cover emoji, Unicode, plural variants, HTML tags — pure LC grinding doesn't cut it.

If you're prepping ZipRecruiter, LinkedIn, Indeed, or Greenhouse SDE OA / VO and feel directionless on string edge cases + business wrapping, contact oavoservice. We tailor OA / VO assistance to your gaps.


FAQ

Which language for ZipRecruiter OA?

Python / Java / Go / TypeScript. Community reports: ~75% Python (string handling fluency).

Same OA across Matching and Search teams?

Same backbone; Matching leans ML pipeline + recommendation graphs, Search leans inverted index + ranking signals. Both contain a string problem.

How many VO rounds?

Typically 4–5: 1 algo + 1 system design + 1 ML / data + 1 behavioral + 1 HM.

Cooldown if failed?

Usually 6 months. Matching / Search / T&S OA buckets are separate — can re-apply across tracks earlier.


Preparing ZipRecruiter SDE OA / VO?

👉 Add WeChat: Coding0201grab the ZipRecruiter VO assistance pack.


Contact

Email: [email protected]
Telegram: @OAVOProxy