码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 0522.最长特殊序列 II:两句话讲明思路(子序列判断)


    【LetMeFly】522.最长特殊序列 II:两句话讲明思路(子序列判断)

    力扣题目链接:https://leetcode.cn/problems/longest-uncommon-subsequence-ii/

    给定字符串列表 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] 只包含小写英文字母

    解题方法:子序列判断

    解题思路

    1. 若字符串a的某个子序列是“独有的子序列”,则a更是“独有的子序列”,因此“最长独有的子序列”一定是字符串列表中的某完整字符串(如有);
    2. 一个字符串是“独有的子序列”,当前仅当它不是任何一个其他字符串的子序列。

    解题方法

    按字符串长度从长到短排序,依次判断每个字符串是否不是其他任何一个字符串的子序列。若该字符串不是任何一个其他字符串的子序列,则返回该字符串的长度。否则返回-1。

    时空复杂度分析

    • 时间复杂度 O ( n 2 l log ⁡ n ) O(n^2l\log n) O(n2llogn),其中 n = l e n ( s t r s ) n=len(strs) n=len(strs), l l l是字符串平均长度
    • 空间复杂度 O ( log ⁡ n ) O(\log n) O(logn)

    AC代码

    C++
    class Solution {
    private:
        bool isSub(string& a, string& b) {
            for (int ia = 0, ib = 0; ia < a.size(); ia++, ib++) {
                while (ib < b.size() && b[ib] != a[ia]) {
                    ib++;
                }
                if (ib == b.size()) {
                    return false;
                }
            }
            return true;
        }
    
        bool ok(vector<string>& strs, int index) {
            for (int i = 0; i < strs.size(); i++) {
                if (i != index && isSub(strs[index], strs[i])) {
                    return false;
                }
            }
            return true;
        }
    public:
        int findLUSlength(vector<string>& strs) {
            sort(strs.begin(), strs.end(), [](const string& a, const string& b) {
                return a.size() > b.size();
            });
            for (int i = 0; i < strs.size(); i++) {
                if (ok(strs, i)) {
                    return strs[i].size();
                }
            }
            return -1;
        }
    };
    

    同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

    Tisfy:https://letmefly.blog.csdn.net/article/details/139756781

  • 相关阅读:
    Google Gmail Oauth Client ID 认证指南
    深度学习笔记(四)——循环神经网络(Recurrent Neural Network, RNN)
    OV5640 低功耗使用说明- PowerDown模式
    【web-避开客户端控件】(2.2.1)收集使用数据: 长度限制、资源副本、基于脚本的确认、禁用的元素
    LeetCode50天刷题计划第二季(Day 31 — 两数之和 II - 输入有序数组(11.10-11.20)分数到小数(11.30-12.30)
    算法设计与分析 | 最大字序列和(动态规划)
    C# 给Word中的字符添加强调符号(着重号)
    什么是函数重载?C语言中是否支持函数重载?
    HarmonyOS系统中内核实现烟雾检测的方法
    【day10.04】QT实现TCP服务器客户端搭建的代码
  • 原文地址:https://blog.csdn.net/Tisfy/article/details/139756781
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号