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;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代理网络基础设施 101:增强安全性、速度和可扩展性

编辑代理网络在现代网络架构中发挥着重要作用&#xff0c;充当管理和重新路由数据流的中介。它们处理的数据可以是各种类型&#xff0c;包括搜索查询和潜在的敏感客户信息&#xff0c;这凸显了它们在数据安全方面的作用。 然而&#xff0c;代理的好处不仅限于安全性。它们为用…

类AAAAAAAAAAAA迭代

class A {vector<A>} C 迭代 这个代码在C中是不能编译的&#xff0c;因为它会导致无限的嵌套&#xff0c;因为std::vector<A>会持有A类型的实例&#xff0c;而A类型的实例又会包含一个std::vector<A>&#xff0c;这会无限制地复制和嵌套下去。 如果你想要创…

linux中如何进行yum源的挂载

linux中如何进行yum源的挂载 ​ 1.首先创建目录[rootserver /]# mkdir /rhel92.使用mount命令进行、dev/cdrom/的镜像文件进行挂载[rootserver /]# mount /dev/cdrom /rhel9/ ​ 注意&#xff1a;此时设立的是临时命令。重启后则失效&#xff0c;若想在下次开启后仍然挂载&a…

WPF由文本框输入的内容动态渲染下拉框

在做项目过程中&#xff0c;需要扫码枪扫描快递单号或者手动输入快递单号时&#xff0c;自动检索该单号是哪个快递公司的&#xff0c;下拉框中自动带出该单号的快递公司。当输入的快递单号不存在时&#xff0c;将数据库中所有快递公司都带出 效果&#xff1a; 通过输入的快递单…

人工智能与生物信息组学 || 2. 非编码 RNA 与疾病关联分析 || 2.2 非编码 miRNA 与疾病关联关系预测

非编码 miRNA 与疾病关联关系预测 越来越多的研究表明&#xff0c;一个复杂疾病通常经由多个 miRNA 协同调控&#xff0c;一个 miRNA 通常参与多个疾病的发生发展过程。因此&#xff0c;预测 miRNA 与疾病的关联关系成为一个当前的研究热点。下面我们将探讨一种 miRNA 和疾病关…

技术驱动会展:展位导航系统的架构与实现

随着会展行业的快速发展&#xff0c;大型会展中心面临着如何提升参展者体验、提高招商效率的挑战。针对客户反馈的展馆面积大、展位查找困难等问题&#xff0c;维小帮提出一套智慧会展导航解决方案&#xff0c;旨在通过先进的室内导航技术提升会展中心的运营效率和参展者的满意…

How to atomically update a maximum value?

c - How to atomically update a maximum value? - Stack Overflow

小阿轩yx-MySQL数据库初体验

小阿轩yx-MySQL数据库初体验 数据库简介 21 世纪迈入了“信息爆炸时代”&#xff0c;大量的数据、信息在不断产生&#xff0c;伴随而来的就是如何安全、有效地存储、检索和管理它们。 对数据的有效存储、高效访问、方便共享和安全控制已经成为信息时代亟待解决的问题。 使用…

【杂记-浅谈OSPF协议中的Router ID】

这里写目录标题 一、OSPF协议要素1、COST值2、进程号3、路由及路由器类型4、区域及网络类型5、DR和BDR6、STUB和NSSA区域7、邻居状态机 二、OSPF路由协议中各功能1、报文认证2、路由聚合3、缺省路由4、路由过滤5、多进程6、路由计算7、最小生成树 一、OSPF协议要素 1、COST值 …

QThread 与QObject::moveToThread在UI中的应用

1. QThread的两种用法 第一种用法就是继承QThread&#xff0c;然后覆写 virtual void run()&#xff0c; 这种用法的缺点是不能利用信号槽机制。 第二种用法就是创建一个线程&#xff0c;创建一个对象&#xff0c;再将对象moveToThread, 这种可以充分利用信号槽机制&#xff…

Python中元组的常用方法

元组的基本使用 t (1, 2, 3) print(t)统计元组元素出现的次数 t (11, 11, 22, 22, 33, 33, 33, 33, 33) print(t, type(t))print(t.count(33))元组的遍历 t (1, 2, 3)for i in t:print(i)print("-" * 33) for i in range(len(t)):print(t[i])print("-&quo…

c,c++,qt从入门到地狱

前言 1 你所能用的正与你手写的效率相同2 你不需要为你没有用到的特性付出 (无脑的调用函数or公式的空壳人类请出门右转)c 001 scanf and strcpy "_s"bug? 微软官方说明1 Visual Studio 库中的许多函数、成员函数、函数模板和全局变量已弃用,改用微软新增的强化函数…

P3056 [USACO12NOV] Clumsy Cows S

[USACO12NOV] Clumsy Cows S 题目描述 Bessie the cow is trying to type a balanced string of parentheses into her new laptop, but she is sufficiently clumsy (due to her large hooves) that she keeps mis-typing characters. Please help her by computing the min…

RK3588 开启HDCP

主题&#xff1a;按照文档配置无法使能HDCP1.4、HDCP2.3 描述&#xff1a; 按照文档配置无法使能HDCP1.4、HDCP2.3,具体操作如下&#xff1a; 1、dts使能使能hdcp1节点&#xff1a; &hdcp1 { status "okay"; }; 2、DWC_HDCP2_BASE_ESM_Firmware 解压…

浅析Node.js中http代理的实现

文章目录 前言ReadableStream和WritableStreamreq.pipe小结 前言 起因是狼书卷1中的API Proxy例子&#xff0c;代码如下&#xff1a; const http require(http) const fs require(fs)const app http.createServer((req, res) > {if (/remote req.url) {res.writeHead(…

canal 服务安装

简介&#xff1a;Canal 是阿里巴巴开源的一个基于 MySQL 数据库增量日志解析的中间件&#xff0c;用于提供准实时的数据同步功能。 准备工作 1.修改配置文件 ,需要先开启 Binlog 写入功能&#xff0c;配置 binlog-format 为 ROW 模式&#xff0c;my.cnf 中配置如下&#xf…

五种实用方法!手把手教你系统盘瘦身

随着电脑的使用时间变长&#xff0c;电脑硬盘会逐渐被各种类型的数据占满&#xff0c;其中系统盘的可用空间也在慢慢变小。这是因为系统在运行过程中会产生大量临时文件和缓存文件&#xff0c;同时&#xff0c;系统的每一次更新升级也都会生成相关的文件夹存放在系统盘中&#…

LeetCode题练习与总结:克隆图--133

一、题目描述 给你无向 连通 图中一个节点的引用&#xff0c;请你返回该图的 深拷贝&#xff08;克隆&#xff09;。 图中的每个节点都包含它的值 val&#xff08;int&#xff09; 和其邻居的列表&#xff08;list[Node]&#xff09;。 class Node {public int val;public L…

阐述一下Golang中defer的原理

基本用法 在Go语言中&#xff0c;defer关键字用于在函数返回前执行一段代码或调用一个清理函数。这对于处理文件关闭、解锁或者返回一些资源到资源池等操作非常有用。 其基本用法如下所示&#xff1a; package mainimport "fmt"func main() {example() }func exam…

如何使用Rekono结合多种工具自动完成渗透测试

关于Rekono Rekono是一款功能强大的自动化渗透测试工具&#xff0c;该工具能够结合其他多种网络安全工具并以自动化的形式完成整个渗透测试过程。在工具运行的过程中所收集到的数据将通过电子邮件或Telegram同时发送给用户&#xff0c;如果需要更加高级的漏洞管理功能&#xf…