PracHub
QuestionsCoachesLearningGuidesInterview Prep

Quick Overview

This question evaluates string manipulation and combinatorial reasoning skills, specifically understanding of subsequence enumeration, duplicate elimination, lexicographic ordering, and algorithmic complexity.

  • medium
  • Two Sigma
  • Coding & Algorithms
  • Software Engineer

All Subsequences After Deleting One Character

Company: Two Sigma

Role: Software Engineer

Category: Coding & Algorithms

Difficulty: medium

Interview Round: Technical Screen

You are given a string `s` of length `n` consisting of lowercase English letters. Consider every string that can be obtained by deleting **exactly one** character from `s` — there are `n` such strings, one for each deletion position. For each resulting string `t`, generate **every non-empty subsequence** of `t`. A subsequence of `t` is obtained by deleting zero or more characters from `t`; the remaining characters must keep the relative order they had in `t` (and therefore the relative order they had in the original string `s`). Collect all strings generated across all `n` deletion results, remove duplicates, and return them sorted in ascending lexicographic order. ### Example Input: `s = "acb"` Deleting one character from `"acb"` produces three strings: - Delete `'a'` → `"cb"`, whose non-empty subsequences are `"c"`, `"b"`, `"cb"` - Delete `'c'` → `"ab"`, whose non-empty subsequences are `"a"`, `"b"`, `"ab"` - Delete `'b'` → `"ac"`, whose non-empty subsequences are `"a"`, `"c"`, `"ac"` Note that the characters of each subsequence keep their original relative order: from `"cb"` the two-character subsequence is `"cb"`, not `"bc"`. Combining all of them, removing duplicates, and sorting lexicographically gives: Output: `["a", "ab", "ac", "b", "c", "cb"]` ### Constraints - `2 <= n <= 15` - `s` consists of lowercase English letters only; `s` may contain repeated characters. - The output must contain each distinct string exactly once, in ascending lexicographic order.

Quick Answer: This question evaluates string manipulation and combinatorial reasoning skills, specifically understanding of subsequence enumeration, duplicate elimination, lexicographic ordering, and algorithmic complexity.

You are given a string `s` of length `n` consisting of lowercase English letters. Consider every string that can be obtained by deleting **exactly one** character from `s` — there are `n` such strings, one for each deletion position. For each resulting string `t`, generate **every non-empty subsequence** of `t`. A subsequence of `t` keeps the relative order of the characters it retains (and therefore their original relative order in `s`). Collect all strings generated across all `n` deletion results, remove duplicates, and return them sorted in ascending lexicographic order. ### Example Input: `s = "acb"` - Delete `'a'` → `"cb"` → subsequences `"c"`, `"b"`, `"cb"` - Delete `'c'` → `"ab"` → subsequences `"a"`, `"b"`, `"ab"` - Delete `'b'` → `"ac"` → subsequences `"a"`, `"c"`, `"ac"` Subsequence characters keep their original order (from `"cb"` the two-character subsequence is `"cb"`, not `"bc"`). Combining, de-duplicating, and sorting gives `["a", "ab", "ac", "b", "c", "cb"]`. ### Constraints - `2 <= n <= 15` - `s` consists of lowercase English letters only; `s` may contain repeated characters. - The output must contain each distinct string exactly once, in ascending lexicographic order.

Constraints

  • 2 <= n <= 15
  • s consists of lowercase English letters only
  • s may contain repeated characters
  • Output contains each distinct string exactly once, sorted ascending lexicographically

Examples

Input: ("acb",)

Expected Output: ["a", "ab", "ac", "b", "c", "cb"]

Explanation: The worked example: deletions cb/ab/ac contribute {c,b,cb}, {a,b,ab}, {a,c,ac}; union sorted is a, ab, ac, b, c, cb.

Input: ("abc",)

Expected Output: ["a", "ab", "ac", "b", "bc", "c"]

Explanation: Deletions give bc, ac, ab; union {b,c,bc,a,ac,ab} sorted is a, ab, ac, b, bc, c.

Input: ("ab",)

Expected Output: ["a", "b"]

Explanation: n=2 boundary: deleting one char leaves a single character each time, yielding {a, b}.

Input: ("aa",)

Expected Output: ["a"]

Explanation: Both deletions leave "a"; the only non-empty subsequence is "a", so the deduped result is a single element.

Input: ("aba",)

Expected Output: ["a", "aa", "ab", "b", "ba"]

Explanation: Deletions ba/aa/ab give {b,a,ba}, {a,aa}, {a,b,ab}; union sorted is a, aa, ab, b, ba, exercising cross-deletion dedup.

Hints

  1. There are exactly n deletion results. For each, enumerate its non-empty subsequences with a bitmask over its (n-1) characters.
  2. Use a set to absorb duplicates that arise both within a deletion result (from repeated letters) and across different deletion results.
  3. Preserving relative order is automatic if you build each subsequence by scanning the deletion result left to right; just sort the final set lexicographically.
Last updated: Jul 2, 2026

Loading coding console...

PracHub

Master your tech interviews with 8,500+ real questions from top companies.

Product

  • Questions
  • Learning Tracks
  • Interview Guides
  • Resources
  • Premium
  • For Universities
  • Student Access

Browse

  • By Company
  • By Role
  • By Category
  • Topic Hubs
  • SQL Questions
  • AI Coding Questions
  • Compare Platforms
  • Discord Community

Support

  • support@prachub.com
  • (916) 541-4762

Legal

  • Privacy Policy
  • Terms of Service
  • About Us

© 2026 PracHub. All rights reserved.

Related Coding Questions

  • Implement Price-Time Order Matching - Two Sigma (medium)
  • Compute Piecewise Linear Interpolation - Two Sigma (medium)
  • Merge two sorted linked lists - Two Sigma (hard)
  • Implement an In-Memory Database - Two Sigma (hard)
  • Merge Two Sorted Lists - Two Sigma (hard)