题目:

给定字符串列表 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. 金蝶中间件 前后台连不上 报跨域 前台解决方案: --user-data-dir="c:\ChromeDebug" --test-type --disable-web-security

    chrome 浏览器的快捷方式后面加参数 --user-data-dir="c:\ChromeDebug" --test-type --disable-web-security

  2. oracle用户密码有@符号连接方法

    oracle用户密码不小心设置了带有"@"符号,正常登陆总是无法登陆,提示无法解析的连接字符串错误,其实解决办法很简单,转义即可,示例如下: exp system/\"x ...

  3. 杂谈之WEB前端工程师身价

    了解javascript语言规范么?+1000 知道各浏览器的css差异么?+1000 javascript差异呢?+1000 知道html各标签的含义并很好地运用么?+1000 知道如何跨浏览器解决 ...

  4. FFmpeg介绍与编译

    目录 FFmpeg FFmpeg核心模块 FFmpeg编译 FFmpeg FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制 ...

  5. App磁盘沙盒工具实践

    目录介绍 01.磁盘沙盒的概述 1.1 项目背景说明 1.2 沙盒作用 1.3 设计目标 02.Android存储概念 2.1 存储划分介绍 2.2 机身内部存储 2.3 机身外部存储 2.4 SD卡 ...

  6. NA嵌入Flutter页面

    目录介绍 01.Android承载flutter容器 02.过时的NA跳转flutter方案 03.升级版本NA跳转Flutter处理 04.如何处理NA跳转flutter传参 05.思考遇到的几个问 ...

  7. JavaScript实现防抖与节流

    1. 引言 有这么一种场景:某个页面表单按钮设置了点击提交事件,有时因为网络不好,点击后后台服务端很久才返回信息,然而用户因等待许久已经多次点击导致多次发送数据,实际上服务器只需要一次发送的数据即可 ...

  8. 记录一次WPF命令参数报错,InvalidCastException: T for DelegateCommand<T> is not an object nor Nullable.

    在使用WPF的时候对int或者bool类型进行绑定出现InvalidCastException: T for DelegateCommand is not an object nor Nullable ...

  9. uni-app如何实现USB插入后自动弹出对应软件

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近碰到了一个奇葩需求,要用uni-app来实现usb接入设备的时候,让软件自动弹出来,这里给出我制作的过程和参考的各种思路,希望对大家有 ...

  10. kali linux安装vmware tools过程详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/robacco/article/deta ...