【Leetcode 每日一题】2900. 最长相邻不相等子序列 I

问题背景

给你一个下标从 0 0 0 开始的字符串数组 w o r d s words words,和一个下标从 0 0 0 开始的 二进制 数组 g r o u p s groups groups,两个数组长度都是 n n n。

你需要从 w o r d s words words 中选出 最长子序列 。如果对于序列中的任何两个连续串,二进制数组 g r o u p s groups groups 中它们的对应元素不同,则 w o r d s words words 的子序列是不同的。

正式来说,你需要从下标 0 , 1 , . . . , n − 1 0, 1, ..., n - 1 0,1,...,n−1 中选出一个 最长子序列 ,将这个子序列记作长度为 k k k 的 i 0 , i 1 , . . . , i k − 1 i_0, i_1, ..., i_{k - 1} i0,i1,...,ik−1,对于所有满足 0 ≤ j < k − 1 0 \le j < k - 1 0≤j<k−1 的 j j j 都有 g r o u p s i j ≠ g r o u p s i j + 1 groupsi_j \ne groupsi_j + 1 groupsij=groupsij+1

请你返回一个字符串数组,它是下标子序列 依次 对应 w o r d s words words 数组中的字符串连接形成的字符串数组。如果有多个答案,返回 任意 一个。
注意: w o r d s words words 中的元素是不同的 。

数据约束

  • 1 ≤ n = w o r d s . l e n g t h = g r o u p s . l e n g t h ≤ 100 1 \le n = words.length = groups.length \le 100 1≤n=words.length=groups.length≤100
  • 1 ≤ w o r d s i . l e n g t h ≤ 10 1 \le wordsi.length \le 10 1≤wordsi.length≤10
  • g r o u p s i groupsi groupsi 是 0 0 0 或 1 1 1。
  • w o r d s words words 中的字符串 互不相同
  • w o r d s i wordsi wordsi 只包含小写英文字母。

解题过程

这题实际上是一个分组问题,将所有连续相同的字符看作是一组,每一组中只选择一个就可以保证相同组的元素不连续出现。

具体实现

java 复制代码
class Solution {
    public List<String> getLongestSubsequence(String[] words, int[] groups) {
        List<String> res = new ArrayList<>();
        int n = groups.length;
        for (int i = 0; i < n; i++) {
            if (i == n - 1 || groups[i] != groups[i + 1]) {
                res.add(words[i]);
            }
        }
        return res;
    }
}
相关推荐
wabs66613 分钟前
关于单调栈【力扣503.下一个更大元素II的思考】
算法·单调栈
c2385616 分钟前
下篇:伸缩魔法!进阶吃透可变滑动窗口篇
c++·算法
txzrxz22 分钟前
关于二维/多维前缀和
算法
来一碗刘肉面26 分钟前
顺序表的按值查找
数据结构·c++·算法
zzz_23681 小时前
【Java实习面试算法冲刺】图论
java·算法·面试
大鱼>1 小时前
宠物监控数据安全与隐私保护:端到端加密与合规实践
人工智能·深度学习·算法·iot·宠物
被自己蠢哭1 小时前
BFS广度优先搜索问题:#P00496. 华为od机试—自动泊车
算法
:-)1 小时前
分支限界算法
算法
小肝一下2 小时前
2. 顺序表和链表
c语言·数据结构·c++·链表·dijkstra·依蕾娜·香香的依蕾娜
j7~2 小时前
【数据结构初阶】带头双向循环链表 (DSList) --增删查改完整实现详解
c语言·数据结构·链表·带头双向循环链表