题目:

给定字符串列表 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. Java GUI swing 可执行程序 jar (java -jar)idea

    创建项目 可以用maven idea设置 into 那个 参考资料 Java 基础 https://www.liaoxuefeng.com/wiki/1252599548343744/12604545 ...

  2. Android 混淆打包后gson报错Missing type parameter

    原文: Android 混淆打包后gson报错Missing type parameter - Stars-One的杂货小窝 记录一个简单的bug 在代码中使用了gson将json转为list: va ...

  3. 【牛客小白月赛51 F平均题】数论,前缀和

    import java.io.IOException; import java.util.Scanner; public class Main { static int MOD = 100000000 ...

  4. springboot如何优雅的获取前端参数

    写在前面 对于初学者来说,困难的不是理论知识,而是如何在程序中具体实现. 现在的项目基本上都是前后端分离的项目,如何打通前后端,接收前端传过来的参数呢? 废话不多说,这篇文章就来说一说接收前端参数的具 ...

  5. C++ 构造函数 explicit 关键字 成员初始化列表

    通常,构造函数具有public可访问性,但也可以将构造函数声明为 protected 或 private.构造函数可以选择采用成员初始化表达式列表,该列表会在构造函数主体运行之前初始化类成员.与在构造 ...

  6. 记录-JavaScript常规加密技术

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 当今Web开发中,数据安全是一个至关重要的问题,为了确保数据的安全性,我们需要使用加密技术.JavaScript作为一种客户端编程语言,可 ...

  7. replace小数点后保留2位

    小数点后保留2位 网上一堆小数点保留2位正则,但大部分都是直接copy,未解决0101和以.开头的这种情况 网上写法 obj.value = obj.value.replace(/[^\d.]/g,& ...

  8. 添加AvalonEdit控件到WinForm

    public frmTest() { InitializeComponent(); ElementHost host = new ElementHost(); host.Size = new Size ...

  9. KingbaseES垃圾回收参数优化之maintenance_work_mem

    maintenance_work_mem 参数说明与vacuum过程 maintenance_work_mem , autovacuum_work_mem. 如果没有设置autovacuum_work ...

  10. DevSecOps 中的漏洞管理(下)

    建立漏洞管理程序以支持DevSecOps 在讨论DevSecOps及DevOps模型中包含安全性的重要性时,建立有效的漏洞管理实践是非常重要的.这可以通过将漏洞管理设置为程序来实现. 我们可以开始对I ...