api: "YAML JSON TOON Database"
version: "1.0.0"
format: "json"
dataset:
  id: 58
  slug: "string-algorithms"
  title: "String Algorithms and Pattern Matching"
  description: "String processing algorithms: KMP, Rabin-Karp, Z-algorithm, suffix trees/arrays, Aho-Corasick, and edit distance (Levenshtein)."
  category: "Data Structures"
  category_slug: "data-structures"
  tags: "strings,pattern-matching,kmp,rabin-karp,z-algorithm,suffix-tree,aho-corasick,levenshtein"
  view_count: 0
  created_at: 1778695229
  updated_at: 1778695229
data:
  algorithms:
    - name: "Knuth-Morris-Pratt (KMP)"
      type: "Pattern Matching"
      time: "O(n + m) preprocessing + search"
      space: "O(m)"
      description: "Uses failure function (longest proper prefix that is also suffix) to skip redundant comparisons"
      use_cases:
        - "Text search in editors"
        - "DNA sequence matching"
        - "Intrusion detection (signature matching)"
      notes: "Preprocessing builds π (pi) table; search never backtracks in text"
    - name: "Rabin-Karp"
      type: "Pattern Matching (Rolling Hash)"
      time: "O(n + m) average, O(nm) worst"
      space: "O(1)"
      description: "Uses hash of pattern and rolling hash of text windows; matches hash before character-by-character verify"
      use_cases:
        - "Plagiarism detection"
        - "Multiple pattern matching"
        - "Fingerprinting"
        - "Duplicate detection"
      notes: "Extendable to 2D pattern matching; collision probability managed with double hashing"
    - name: "Z-Algorithm"
      type: "Pattern Matching"
      time: "O(n + m)"
      space: "O(n + m)"
      description: "Computes Z-array: length of longest substring starting at each position that matches a prefix"
      use_cases:
        - "String matching"
        - "Period detection"
        - "Longest common prefix queries"
      notes: "Concatenate pattern$text with sentinel; Z-values ≥ pattern length indicate matches"
    - name: "Suffix Tree"
      type: "String Index"
      build_time: "O(n)"
      space: "O(n)"
      description: "Compressed trie of all suffixes; enables O(m) pattern search, longest repeated substring, etc."
      use_cases:
        - "Genomic sequence analysis"
        - "Full-text search"
        - "Longest common substring"
        - "Palindrome detection"
      notes: "Ukkonen's algorithm builds in linear time; high constant factor and memory usage in practice"
    - name: "Suffix Array"
      type: "String Index"
      build_time: "O(n log n) or O(n)"
      space: "O(n)"
      description: "Sorted array of all suffixes; with LCP array enables most suffix tree operations with less memory"
      use_cases:
        - "Compressed text indexing"
        - "Bioinformatics"
        - "Data compression (BWT)"
      notes: "Binary search for pattern in O(m log n); with LCP array can achieve O(m + log n)"
    - name: "Aho-Corasick"
      type: "Multi-pattern Matching"
      time: "O(n + m + z) where z = number of matches"
      space: "O(m)"
      description: "Builds automaton from dictionary of patterns; finds all occurrences of all patterns in one text pass"
      use_cases:
        - "Virus/malware signature scanning"
        - "Keyword highlighting"
        - "Content filtering"
        - "Aho-Corasick automaton"
      notes: "Extends KMP failure function to a trie; failure links point to longest proper suffix that is a dictionary prefix"
    - name: "Levenshtein Distance (Edit Distance)"
      type: "String Similarity"
      time: "O(m * n)"
      space: "O(min(m,n)) with optimization"
      description: "Minimum number of single-character edits (insert, delete, substitute) to transform one string into another"
      use_cases:
        - "Spell checking"
        - "Fuzzy search"
        - "DNA sequence alignment"
        - "Plagiarism detection"
        - "OCR error correction"
      notes: "Dynamic programming; can be optimized with Ukkonen's cutoff for bounded distance queries"
