题目:

给定字符串列表 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)-最长特殊序列Ⅱ(中等)的更多相关文章

  1. 力扣(LeetCode)长按键入 个人题解

    你的朋友正在使用键盘输入他的名字 name.偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次. 你将会检查键盘输入的字符 typed.如果它对应的可能是你的朋友的名字(其中一 ...

  2. Java实现 LeetCode 522 最长特殊序列 II(查找最长的非子序列的长度)

    522. 最长特殊序列 II 给定字符串列表,你需要从它们中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中的某些 ...

  3. C++双指针滑动和利用Vector实现无重复字符的最长子串—力扣算法

    题目: 力扣原题链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 给定一个字符串, ...

  4. Java实现 蓝桥杯VIP 算法提高 最长字符序列

    算法提高 最长字符序列 时间限制:1.0s 内存限制:256.0MB 最长字符序列 问题描述 设x(i), y(i), z(i)表示单个字符,则X={x(1)x(2)--x(m)},Y={y(1)y( ...

  5. 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度

    题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...

  6. Leetcode 522.最长特殊序列II

    最长特殊序列II 给定字符串列表,你需要从它们中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中的某些字符实现,但 ...

  7. leetcode.哈希表.128最长连续序列-Java

    1. 具体题目 给定一个未排序的整数数组,找出最长连续序列的长度.要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 ...

  8. Java实现 LeetCode 521 最长特殊序列 Ⅰ(出题人:“就是喜欢看你们不敢相信那么简单,又不敢提交的样子。”)

    521. 最长特殊序列 Ⅰ 给定两个字符串,你需要从这两个字符串中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中 ...

  9. Java实现 LeetCode 128 最长连续序列

    128. 最长连续序列 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连 ...

  10. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

随机推荐

  1. GCC&&G++ C && C++ 内嵌汇编和调用汇编函数的方法(x86,ARM自己对照改)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  2. SVN 提交文件报错:svn: E155015: Aborting commit:

    svn 提交文件报错: svn: E155015: Commit failed (details follow): svn: E155015: Aborting commit: '文件名称' rema ...

  3. 《世嘉新人培训教材—游戏开发》2DGraphics1项目cmake构建

    <世嘉新人培训教材-游戏开发>作为经典的游戏开发教程,提供了相关样例代码供我们进行开发使用.但是该样例是基于VS进行编写构建的,而本人日常喜欢CLion进行C/C++开发,于是准备使用cm ...

  4. C++ Concurrency in Action 读书笔记二:用mutex互斥锁保护在线程间共享的数据

    Chapter 3 线程间共享数据 3.2 用互斥锁保护共享数据

  5. verilog设计知识集合(2)

    verilog设计知识集合(2) 1.阻塞与非阻塞 阻塞赋值是存在先后关系的,非阻塞是不存在先后关系的.一般而言,阻塞用于组合逻辑,非阻塞用于时序逻辑(不一定).阻塞的执行时逐步赋值,非阻塞是同步赋值 ...

  6. proteus的C51仿真

    Proteus的C51仿真 1.实验原理 Proteus是对C51仿真效果比较好的软件了,可以利用丰富的数字资源的外设实现比较接近实际的设计.仿真方法也比较简单,不需要下载,只需要将仿真文件导出到器件 ...

  7. KingbaseES Json 系列三:Json数据操作函数一

    KingbaseES Json 系列三--Json数据操作函数一(JSONB_EACH,JSONB_EACH_TEXT,JSONB_OBJECT_KEYS,JSONB_EXTRACT_PATH,JSO ...

  8. 慢查询SQL排查

    转载请注明出处️ 作者:测试蔡坨坨 原文链接:caituotuo.top/c56bd0c5.html 你好,我是测试蔡坨坨. 在往期文章中,我们聊过数据库基础知识,可参考「数据库基础,看完这篇就够了! ...

  9. JavaScript二代公民身份证号验证

    身份证号码中的校验码是身份证号码的最后一位,是根据[中华人民共和国国家标准GB 11643-1999]中有关公民身份号码的规定, 根据精密的计算公式计算出来的,公民身份号码是特征组合码,由十七位数字本 ...

  10. Rust 实现日志记录功能

    目录 log 日志库标准 简单示例 使用方法 库的开发者 应用开发者 日志库开发者 使用 log4rs 添加依赖 配置文件 运行项目 参考文章 log 日志库标准 log 是 Rust 的日志门面库, ...