{leetcode}/problems/longest-unequal-adjacent-groups-subsequence-ii/[LeetCode - 2901. Longest Unequal Adjacent Groups Subsequence II ^]
You are given a string array words
, and an array groups
, both arrays having length n
.
The hamming distance between two strings of equal length is the number of positions at which the corresponding characters are different.
You need to select the longest <span data-keyword="subsequence-array">subsequence from an array of indices [0, 1, …, n - 1]
, such that for the subsequence denoted as [i<sub>0</sub>, i<sub>1</sub>, …, i<sub>k-1</sub>]
having length k
, the following holds:
-
For adjacent indices in the subsequence, their corresponding groups are unequal, i.e.,
groups[i<sub>j</sub>] != groups[i<sub>j+1</sub>]
, for eachj
where0 < j + 1 < k
. -
words[i<sub>j</sub>]
andwords[i<sub>j+1</sub>]
are equal in length, and the hamming distance between them is1
, where0 < j + 1 < k
, for all indices in the subsequence.
Return a string array containing the words corresponding to the indices (in order) in the selected subsequence. If there are multiple answers, return any of them.
Note: strings in words
may be unequal in length.
Example 1:
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;"> *Input: *<span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">words = ["bab","dab","cab"], groups = [1,2,2]
*Output: *<span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">["bab","cab"]
*Explanation: *A subsequence that can be selected is [0,2]
.
-
groups[0] != groups[2]
-
words[0].length == words[2].length
, and the hamming distance between them is 1.
So, a valid answer is [words[0],words[2]] = ["bab","cab"]
.
Another subsequence that can be selected is [0,1]
.
-
groups[0] != groups[1]
-
words[0].length == words[1].length
, and the hamming distance between them is1
.
So, another valid answer is [words[0],words[1]] = ["bab","dab"]
.
It can be shown that the length of the longest subsequence of indices that satisfies the conditions is 2
.
Example 2:
<div class="example-block" style="border-color: var(--border-tertiary); border-left-width: 2px; color: var(--text-secondary); font-size: .875rem; margin-bottom: 1rem; margin-top: 1rem; overflow: visible; padding-left: 1rem;"> *Input: *<span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">words = ["a","b","c","d"], groups = [1,2,3,4]
*Output: *<span class="example-io" style="font-family: Menlo,sans-serif; font-size: 0.85rem;">["a","b","c","d"]
*Explanation: *We can select the subsequence [0,1,2,3]
.
It satisfies both conditions.
Hence, the answer is [words[0],words[1],words[2],words[3]] = ["a","b","c","d"]
.
It has the longest length among all subsequences of indices that satisfy the conditions.
Hence, it is the only answer.
Constraints:
-
1 ⇐ n == words.length == groups.length ⇐ 1000
-
1 ⇐ words[i].length ⇐ 10
-
1 ⇐ groups[i] ⇐ n
-
words
consists of distinct strings. -
words[i]
consists of lowercase English letters.