力扣522(java)-最长特殊序列Ⅱ(中等)
题目:
给定字符串列表 strs ,返回 它们中 最长的特殊序列 。如果最长特殊序列不存在,返回 -1 。
最长特殊序列 定义如下:该序列为某字符串 独有的最长子序列(即不能是其他字符串的子序列)。
s 的 子序列可以通过删去字符串 s 中的某些字符实现。
例如,"abc" 是 "aebdc" 的子序列,因为您可以删除"aebdc"中的下划线字符来得到 "abc" 。"aebdc"的子序列还包括"aebdc"、 "aeb" 和 "" (空字符串)。
示例 1:
输入: strs = ["aba","cdc","eae"]
输出: 3
示例 2:
输入: strs = ["aaa","aaa","aa"]
输出: -1
提示:
2 <= strs.length <= 50
1 <= strs[i].length <= 10
strs[i] 只包含小写英文字母
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-uncommon-subsequence-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
1.先将字符串列表strs的字符串按照字符串长度降序排列;
2.比较各个字符串,设置初始标志位 flag = true,设置两个指 i 和 j
- 如果当前 i 和 j 指向的字符串为同一个,则中止当前循环,进行下一次循环 j++ 指向下一个字符串;
- 否则,运用 isSubsequence() 判断两个字符串是否为包含关系
- 如果当前两个字符串长度相等内容也相等,则是包含关系,返回true;
- 如果当前两个字符串长度不相等,则遍历它们的每个字符进行判断,如果当前比较的字符串已经比较到末尾,则说明字符串中存在当前字符串的子序列,返回true,否则返回false;
- 如果 isSubsequence()返回的结果为true,将标志位改为false;
- 最终,如果标志位为true,则说明没有包含关系,返回当前字符串的长度,即为最长特殊子序列的长度,否则不存在最长特殊子序列,返回-1。
代码:
1 class Solution {
2 public int findLUSlength(String[] strs) {
3 Arrays.sort(strs, (str1,str2)->{
4 return str2.length() - str1.length();
5 });
6 for(int i = 0; i < strs.length; i++){
7 boolean flag = true;
8 for(int j = 0; j< strs.length; j++){
9 if(i == j){
10 continue;
11 }
12 if(isSubsequence(strs[i], strs[j])){
13 flag = false;
14 break;
15 }
16 }
17 if(flag){
18 return strs[i].length();
19 }
20 }
21 return -1;
22 }
23 public boolean isSubsequence(String a, String b){
24 //如果长度相同内容也相同,则说明是包含关系
25 if(a.length() == b.length()) return a.equals(b);
26 int i = 0;
27 for(int j = 0; j < b.length() && i < a.length(); j++){
28 if(a.charAt(i) == b.charAt(j)){
29 i++;
30 }
31 }
32 //如果最后i和a的长度值一样,说明是包含关系
33 return i == a.length();
34 }
35 }
小知识:
1.continue 和 break:
continue语句用于循环语句中,作用是不执行循环体剩余部分,直接进行下次循环。常见的就是与if连用;
break会跳出整个for循环。
1 int main()
2 {
3 int i;
4 for(i = 0; i < 10; i ++)
5 {
6 if(i%2==0) continue;//如果i为偶数 调用continue;
7 printf("%d,", i);//输出i值
8 }
9 }
10 当i为0,2,4,6,8时,满足i%2==0的条件,执行continue语句,进入下次循环,不会执行printf语句,这个程序的结果为 1,3,5,7,9
2.Arrays.sort()和Collections.sort()的区别:
Collections.sort 实质上调用的是Arrays.sort
- Arrays.sort 针对任意对象,排序的类型就为传入的对象类。
如:Arrays.sort(a) //这里a为数组,可以是 int / String / 类 数组,排序类型依次为int ,String,类
- Collections.sort 针对集合(List),排序类型为List对应的类型。
如:Collections.sort (l) //这里l为List 对象,可以为List< Integer> / List< String> / List<类> ,排序类型依次为Integer,String ,类
力扣522(java)-最长特殊序列Ⅱ(中等)的更多相关文章
- 力扣(LeetCode)长按键入 个人题解
你的朋友正在使用键盘输入他的名字 name.偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次. 你将会检查键盘输入的字符 typed.如果它对应的可能是你的朋友的名字(其中一 ...
- Java实现 LeetCode 522 最长特殊序列 II(查找最长的非子序列的长度)
522. 最长特殊序列 II 给定字符串列表,你需要从它们中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中的某些 ...
- C++双指针滑动和利用Vector实现无重复字符的最长子串—力扣算法
题目: 力扣原题链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 给定一个字符串, ...
- Java实现 蓝桥杯VIP 算法提高 最长字符序列
算法提高 最长字符序列 时间限制:1.0s 内存限制:256.0MB 最长字符序列 问题描述 设x(i), y(i), z(i)表示单个字符,则X={x(1)x(2)--x(m)},Y={y(1)y( ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
- Leetcode 522.最长特殊序列II
最长特殊序列II 给定字符串列表,你需要从它们中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中的某些字符实现,但 ...
- leetcode.哈希表.128最长连续序列-Java
1. 具体题目 给定一个未排序的整数数组,找出最长连续序列的长度.要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 ...
- Java实现 LeetCode 521 最长特殊序列 Ⅰ(出题人:“就是喜欢看你们不敢相信那么简单,又不敢提交的样子。”)
521. 最长特殊序列 Ⅰ 给定两个字符串,你需要从这两个字符串中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中 ...
- Java实现 LeetCode 128 最长连续序列
128. 最长连续序列 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连 ...
- 力扣算法经典第一题——两数之和(Java两种方式实现)
一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...
随机推荐
- 学习笔记-涛讲F#(基础 II)
目录 处理一堆数 组织代码(命名空间.模块) 使用联合重命名类型 类必须显式转换成接口 对象表达式 递归函数 CPS解决堆栈溢出 扩展一个类型 静态解析的类型参数 ref变量的实现原理及应用 F#资源 ...
- 一次对requirements环境的配置
事情是这样的,我需要跑通一个代码,因此要配置环境,但是并不能利用requirements中给的指令直接配置,于是开始找一些其他的解决方法.作为一名小白,总是绕很多弯路. 记下一些蜿蜒. 首先,摘录re ...
- Spring boot返回时间与MySql数据库中不相同问题及解决方法
最近做项目测试的发现,访问Url返回的时间与数据库中的不相同,环境是Spring boot+MyBatis+Mysql(阿里云服务器),经过一番折腾,得到了解决 问题描述 我是直接使用IDEA的数据库 ...
- Android设备上运行live555的推流程序
在live555使用NDK21编译出arm64-v8a和armeabi-v7a中我们编译出了v8a和v7a的可执行文件 我们可以使用testH264VideoStreamer程序进行推流 我们将tes ...
- 今日学习:位运算&中国剩余定理
-2^ 31的补码是-0.也就是 1000 0000 0000 0000 0000 0000 0000 0000 补码是原码取反加1 x&(-x) 是最低位为1的位为1,其余位为0. 中国剩余 ...
- 基于Rust的Tile-Based游戏开发杂记(01)导入
什么是Tile-Based游戏? Tile-based游戏是一种使用tile(译为:瓦片,瓷砖)作为基本构建单位来设计游戏关卡.地图或其他视觉元素的游戏类型.在这样的游戏中,游戏世界的背景.地形.环境 ...
- Three.js的基础使用
1. 引言 Three.js是著名的JavaScript 3D图形库,用于浏览器中开发 3D 交互场景的 JS 引擎,可以快速的搭建三维场景 Three.js官网为:创建一个场景 – three.js ...
- 记录--整会promise这8个高级用法
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 发现很多人还只会promise常规用法 在js项目中,promise的使用应该是必不可少的,但我发现在同事和面试者中,很多中级或以上的前端 ...
- FPGA中的面积优化
FPGA中的面积优化 一.优化的意义 面积优化,就是在实现预定功能的情况下,使用更小的面积.通过优化,可以使设计能够运行在资源较少的平台上,节约成本,也可以为其他设计提供面积资源. 二.操作符平衡 对 ...
- KingbaseES V8R3集群运维案例之---流复制异步同步及全同步模式配置
案例说明: 通过案例描述KingbaseES V8R3集群异步.同步及全同步强一致性配置,本案例为一主二备的架构. 适用版本: KingbaseES V8R3 集群架构: 集群复制配置参数说明: 1) ...