题目:

给定字符串列表 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. Cordon、Drain、污点与容忍度、亲和性与反亲和性

    在Kubernetes(K8s)中,Cordon.Drain.污点与容忍度.亲和性与反亲和性都是与资源管理和调度相关的概念.下面是对这些概念的详细解释: Cordon(封锁.警戒): Cordon是一 ...

  2. 如何用数字人技术让课堂活起来?番职院和3DCAT实时云渲染给出答案

    2023年4月20日,广州市第二届智慧教育成果巡展活动在番禺职业技术学院(下文简称番职院)举行,本次活动的主题是''智能AI助教-让课堂活起来''. 活动现场,瑞云科技受邀展示了其自主研发的瑞云数字人 ...

  3. 从零开始写 Docker(七)---实现 mydocker commit 打包容器成镜像

    本文为从零开始写 Docker 系列第七篇,实现类似 docker commit 的功能,把运行状态的容器存储成镜像保存下来. 完整代码见:https://github.com/lixd/mydock ...

  4. 记一次 .NET某施工建模软件 卡死分析

    一:背景 1. 讲故事 前几天有位朋友在微信上找到我,说他的软件卡死了,分析了下也不知道是咋回事,让我帮忙看一下,很多朋友都知道,我分析dump是免费的,当然也不是所有的dump我都能搞定,也只能尽自 ...

  5. HeaderedContentControl实现左右对称

    在我们使用TextBlock却想给前面添加固定字段的时候,发现TextBlock没有Header属性, 这个时候我们可以用到HeaderedContentControl 然而,默认情况下Headere ...

  6. KingbaseES Json 系列十:Json数组构造函数

    KingbaseES Json 系列十--Json数组构造函数(ARRAY_TO_JSON,JSONB_BUILD_ARRAY,JSON_ARRAY,JSON_BUILD_ARRAY) JSON 数据 ...

  7. Python爬虫爬取ECCV Conference Papers(一)

    爬取到2020年所有论文标题 代码: 1 import re 2 import requests 3 from bs4 import BeautifulSoup 4 import lxml 5 imp ...

  8. 第一个hello驱动

    Linux驱动程序的分类 字符设备驱动.块设备驱动和网络设备驱动. Linux驱动程序运行方式 把驱动程序编译进内核里面,这样内核启动后就会自动运行驱动程序了: 把驱动程序编译成以.ko为后缀的模块文 ...

  9. 学习Source Generators之IncrementalValueProvider

    前面我们使用了IIncrementalGenerator来生成代码,接下来我们来详细了解下IIncrementalGenerator的核心部分IncrementalValueProvider. 介绍 ...

  10. 从 findbugs-maven-plugin 到 spotbugs-maven-plugin 帮你找到代码中的bug

    一.findbugs-maven-plugin 介绍: Status: Since Findbugs is no longer maintained, please use Spotbugs whic ...