Solve two string algorithm tasks
Company: Meta
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: Medium
Interview Round: Technical Screen
Quick Answer: Solve two string algorithm tasks evaluates algorithm design, data structures, correctness, complexity, edge cases, and implementation details in a realistic interview setting. A strong answer states assumptions, handles edge cases, explains trade-offs, and shows how to validate the result clearly.
Minimum Parentheses Insertions to Make Valid
Constraints
- 1 <= |s| <= 100,000
- s consists only of the characters '(' and ')'
Examples
Input: ('())',)
Expected Output: 1
Explanation: One ')' is unmatched at the front context; insert a single '(' to balance, giving "(())".
Input: ('(((',)
Expected Output: 3
Explanation: Three unmatched '(' remain; each needs a closing ')'.
Input: ('()',)
Expected Output: 0
Explanation: Already balanced.
Input: ('',)
Expected Output: 0
Explanation: Empty string is trivially valid.
Input: (')(',)
Expected Output: 2
Explanation: The leading ')' needs a '(' before it; the trailing '(' needs a ')' after it.
Input: ('()))((',)
Expected Output: 4
Explanation: Two stray ')' each force a '(' insertion (2), and two leftover '(' each need a ')' (2).
Input: (')))',)
Expected Output: 3
Explanation: Three ')' with no available '(' each force one '(' insertion.
Hints
- Scan left to right tracking how many '(' are currently unmatched (open balance).
- Every ')' that has no open '(' to pair with forces one insertion of '(' and does not change the balance; otherwise it consumes an open '('.
- At the end, every remaining unmatched '(' needs one inserted ')'. Answer = forced '(' insertions + leftover open balance.
Shortest Covering Substring (Minimum Window)
Constraints
- 1 <= |s| <= 200,000
- 1 <= |t| <= 10,000
- s and t consist of ASCII characters
Examples
Input: ('ADOBECODEBANC', 'ABC')
Expected Output: 'BANC'
Explanation: The window "BANC" contains A, B, and C and is the shortest such window.
Input: ('a', 'a')
Expected Output: 'a'
Explanation: The single character satisfies t exactly.
Input: ('a', 'aa')
Expected Output: ''
Explanation: s has only one 'a' but t needs two, so no valid window exists.
Input: ('aa', 'aa')
Expected Output: 'aa'
Explanation: Both 'a' are needed; the whole string is the minimum window.
Input: ('abc', 'd')
Expected Output: ''
Explanation: 'd' never appears in s.
Input: ('xyzabc', 'cba')
Expected Output: 'abc'
Explanation: Order in t does not matter; "abc" covers a, b, c in the fewest characters.
Input: ('aaflslflsldkalskaaa', 'aaa')
Expected Output: 'aaa'
Explanation: The trailing run of three 'a' is the shortest window holding three 'a'.
Input: ('cabwefgewcwaefgcf', 'cae')
Expected Output: 'cwae'
Explanation: "cwae" is a length-4 window containing c, a, and e.
Hints
- Count the required frequency of each character in t. Use a sliding window with two pointers over s.
- Expand the right pointer to include characters; track how many distinct required characters are currently satisfied ('formed').
- When all required characters are satisfied, shrink from the left to minimize the window, recording the best length, then continue scanning.