当前位置: 首页 > article >正文

115 双周赛

2901. 最长相邻不相等子序列 II

给你一个整数 n 和一个下标从 0 开始的字符串数组 words ,和一个下标从 0 开始的数组 groups ,两个数组长度都是 n 。

两个长度相等字符串的 汉明距离 定义为对应位置字符 不同 的数目。

你需要从下标 [0, 1, …, n - 1] 中选出一个 最长子序列 ,将这个子序列记作长度为 k 的 [i0, i1, …, ik - 1] ,它需要满足以下条件:

相邻 下标对应的 groups 值 不同。即,对于所有满足 0 < j + 1 < k 的 j 都有 groups[ij] != groups[ij + 1] 。
对于所有 0 < j + 1 < k 的下标 j ,都满足 words[ij] 和 words[ij + 1] 的长度 相等 ,且两个字符串之间的 汉明距离 为 1 。
请你返回一个字符串数组,它是下标子序列 依次 对应 words 数组中的字符串连接形成的字符串数组。如果有多个答案,返回任意一个。

子序列 指的是从原数组中删掉一些(也可能一个也不删掉)元素,剩余元素不改变相对位置得到的新的数组。

注意:words 中的字符串长度可能 不相等 。

示例 1:

输入:n = 3, words = [“bab”,“dab”,“cab”], groups = [1,2,2]
输出:[“bab”,“cab”]

解题思路

动态规划,唯一路径

code
class Solution {
    public Boolean Hamming(String s1,String s2){
        if(s1.length()!=s2.length())
        return false;
        int x = 0;
        for(int i=0;i<s1.length();i++)
            if(s1.charAt(i)!=s2.charAt(i)&&++x>1)
            return false;
        return true;
        }
    public List<String> getWordsInLongestSubsequence(int n, String[] words, int[] groups) {
            int[] source = new int[n];
            int[] best_seq = new int[n];
            int max_seq = 0;
            for(int i=0;i<n;i++)
            {
                for(int j=i-1;j>=0;j--)
                    if(best_seq[j]>best_seq[i]&&groups[j]!=groups[i]&&Hamming(words[i],words[j]))
                    {
                        best_seq[i]=best_seq[j];
                        source[i] = j;
                    }
            
            best_seq[i]++;
            if(best_seq[i]>best_seq[max_seq])
            max_seq = i;
            }
         List<String> result = new ArrayList<>();
         int now = max_seq;
         for(int i=0;i<best_seq[max_seq];i++)
         {
             result.add(words[now]);
             now = source[now];
         }
         for(int i=0;i<result.size()/2;i++)
             Collections.swap(result, i, result.size()-1-i);
         return result;
    }
}

http://www.kler.cn/news/107262.html

相关文章:

  • SQLAlchemy删除所有重复的用户|Counter类运用
  • 【考研数学】概率论与数理统计 —— 第七章 | 参数估计(1,基本概念及点估计法)
  • Spring Boot 配置邮件发送服务
  • C# 图解教程 第5版 —— 第10章 语句
  • ARM | 传感器必要总线IIC
  • Docker创建mysql容器
  • 驱动开发5 阻塞IO实例、IO多路复用
  • Idea Debug断点太多 启动太慢
  • 由于找不到emp.dll无法继续执行此代码问题的五个解决方法
  • OpenAI 组建安全 AGI 新团队!应对AI“潘多拉魔盒”
  • 2023 年 Web 应用程序开发最佳技术堆栈
  • 【ROS入门】机器人运动控制以及里程计信息显示
  • CPU眼里的C/C++: 1.3 汇编级单步调试函数执行过程
  • C# 超链接 LinkLabel 类 控件
  • 最新Unity DOTS系列之Aspect核心机制分析
  • 多分类loss学习记录
  • 安防监控项目---boa服务器的移植
  • MySQL索引优化实战指南(InsCode AI 创作助手)
  • ilr normalize isometric log-ratio transformation
  • 291_C++_发送json数据给对于的URL【JSON数据交互】
  • 面向对象设计原则之依赖倒置原则
  • 香港服务器如何做负载均衡?
  • Python中json的用法
  • 1818_ChibiOS的计数信号量
  • Jenkins CLI二次开发工具类
  • CANOE 仿真+测试
  • 高可用系统架构——关于语雀宕机的思考
  • 使用es实现轻量级分布式锁
  • 【python学习笔记——列表】
  • 【@EnableWebMvc的原理】