3571. Find the Shortest Superstring II π
Description
You are given two strings, s1
and s2
. Return the shortest possible string that contains both s1
and s2
as substrings. If there are multiple valid answers, return any one of them.
A substring is a contiguous sequence of characters within a string.
Example 1:
Input: s1 = "aba", s2 = "bab"
Output: "abab"
Explanation:
"abab"
is the shortest string that contains both "aba"
and "bab"
as substrings.
Example 2:
Input: s1 = "aa", s2 = "aaa"
Output: "aaa"
Explanation:
"aa"
is already contained within "aaa"
, so the shortest superstring is "aaa"
.
Constraints:
1 <= s1.length <= 100
1 <= s2.length <= 100
s1
ands2
consist of lowercase English letters only.
Solutions
Solution 1: Enumerate Overlapping Parts
We can construct the shortest string containing both s1
and s2
as substrings by enumerating the overlapping parts of the two strings.
Our goal is to build the shortest string that contains both s1
and s2
as substrings. Since substrings must be contiguous, we try to overlap the suffix of one string with the prefix of the other, thereby reducing the total length when concatenating.
Specifically, there are several cases:
- Containment: If
s1
is a substring ofs2
, thens2
itself satisfies the condition, so just returns2
; vice versa as well. - s1 concatenated before s2: Enumerate whether a suffix of
s1
matches a prefix ofs2
, and concatenate after finding the maximum overlap. - s2 concatenated before s1: Enumerate whether a prefix of
s1
matches a suffix ofs2
, and concatenate after finding the maximum overlap. - No overlap: If there is no overlap between the suffix/prefix of the two strings, simply return
s1 + s2
.
We try both concatenation orders and return the shorter one (if the lengths are equal, either is acceptable).
The time complexity is \(O(n^2)\) and the space complexity is \(O(n)\), where \(n\) is the maximum length of s1
and s2
.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|