Leetcode 522. 最长特殊序列 II (判断子序列 优化)

2024-06-18 13:04

本文主要是介绍Leetcode 522. 最长特殊序列 II (判断子序列 优化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Leetcode 522. 最长特殊序列 II

暴力枚举

根据特殊序列的定义,枚举出每个 strs[ i ] 的所有子序列,再将这个子序列与strs中的其他串比较判断
使用二进制位运算枚举一个str的所有子序列
使用双指针指向两个串的开头,同时移动判断是否是子序列

子串 定义为原字符串中任意连续的一段,
如"abcd"中的“bc”
子序列 定义为原字符串中选择某些字符所组成的新字符串,它们的相对顺序不变,不需连续
如“abcd”中的“ac”

class Solution {// 判断函数  s是否为t的子序列public boolean isSubsequence(String s, String t) {int m = s.length();int n = t.length();int ls = 0;int lt = 0;while(ls < m && lt < n){if(s.charAt(ls) == t.charAt(lt)){ls ++;}lt ++;}return ls == m;}public int findLUSlength(String[] strs) {int n = strs.length;int res = -1;for(int i = 0 ; i < n; i ++){String s = strs[i];int len = s.length();// 枚举s的每个子序列for(int k = 1; k < (1 << len); k ++){StringBuffer sb = new StringBuffer("");for(int j = 0; j < len; j ++){if((k & (1 << j)) != 0){ // 不能写成 k & (1 << j)) == 1,与运算后的1可能不在末位sb.append(s.charAt(j));}}// 获得子序列ssString ss = sb.toString();boolean flag = true;for(int p = 0; p < n; p ++){if(p != i && isSubsequence(ss, strs[p])){flag = false;break;}}if(flag)res = Math.max(res, ss.length());}}return res;}
}

优化

注意到,如果一个str的子序列满足条件“不是其他字符串的子序列”,那个这个子序列无论如何扩充,扩充后的子序列也必定不是其他字符串的子序列
如子序列“abc”不是“qwerty”、“asdfgh”、“zxcvbn”的子序列,那么将“abc”任意扩充为“axbycz”,也必定不是其他字符串的子序列
由此推出,若str的一个子序列满足条件,那么str本身也必定满足条件

由此问题转化为,判断str[ i ]是否是其他strs的子序列,找出最长的一个str[ i ]返回长度

class Solution {public boolean isSubsequence(String s, String t) {int m = s.length();int n = t.length();int ls = 0;int lt = 0;while(ls < m && lt < n){if(s.charAt(ls) == t.charAt(lt)){ls ++;}lt ++;}return ls == m;}public int findLUSlength(String[] strs) {int n = strs.length;int ans = -1;for(int i = 0; i < n ; i++){String s = strs[i];// 避免计算更小的答案int len = s.length();if(len <= ans)continue;boolean flag = true;for(int j = 0; j < n; j ++){if(i != j && isSubsequence(s, strs[j])){flag = false;break;}}if(flag)ans = Math.max(ans, s.length());}return ans;}
}

这篇关于Leetcode 522. 最长特殊序列 II (判断子序列 优化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072071

相关文章

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命