[leetcode] 522. 最长特殊序列 II 暴力 + 双指针

简介: [leetcode] 522. 最长特殊序列 II 暴力 + 双指针

题目链接:传送门


暴力 + 双指针

题意有点绕,大体意思是:

给定一个字符串序列,问最长的不是其他字符串的子序列的串的长度是多大,如果没有则返回-1


比如题目中给定的"aba","cdc","eae"三个字符串,每个字符串都可以是最长的不是其他字符串的子序列

aba不是cdc的子序列,并且也不是eae的子序列

cdc不是aba的子序列,并且也不是eae的子序列

eae不是aba的子序列,并且也不是cdc的子序列

所以说:结果为3(aba、cdc、eae的长度均为3)


而对于"aaa","aaa","aa" 来讲第一个字符串aaa的子序列aa是第二个字符串aaa和第三个字符串aa的子序列,所以说不满足条件,其余的均不满足,所以说结果为-1


思路:

首先,暴力枚举每个字符串s[i]为子序列的情况,并且判断该字符串是否为其他字符串的子序列,如果满足条件,便记录max{s[i]}


java_code:

public class Solution {
    public static int findLUSlength(String[] strs) {
        int ans = -1;
        int len = strs.length;
        for (int i = 0; i < len; i++) {
            boolean flag = true;
            for (int j = 0; j < len; j++) {
                if (i == j) continue;
                if (isSubStr(strs[i], strs[j])) {
                    flag = false;
                    break;
                }
            }
            if (flag) ans = Math.max(ans, strs[i].length());
        }
        return ans;
    }
    public static boolean isSubStr(String a, String b) {
        int lena = a.length();
        int lenb = b.length();
        int pa = 0, pb = 0;
        while (pa < lena && pb < lenb) {
            if (a.charAt(pa) == b.charAt(pb)) pa++;
            pb++;
        }
        if (pa != lena) return false;
        else return true;
    }
    public static void main(String[] args) {
    }
}


目录
相关文章
|
Python
【Leetcode刷题Python】376. 摆动序列
文章提供了解决LeetCode "摆动序列" 问题的Python实现代码,通过遍历整数数组并使用两个变量 down 和 up 来记录正差和负差摆动序列的长度,最终返回最长摆动子序列的长度。
92 0
|
3月前
|
Go
【LeetCode 热题100】DP 实战进阶:最长递增子序列、乘积最大子数组、分割等和子集(力扣300 / 152/ 416 )(Go语言版)
本文深入解析三道经典的动态规划问题:**最长递增子序列(LIS)**、**乘积最大子数组** 和 **分割等和子集**。 - **300. LIS** 通过 `dp[i]` 表示以第 `i` 个元素结尾的最长递增子序列长度,支持 O(n²) 动态规划与 O(n log n) 的二分优化。 - **152. 乘积最大子数组** 利用正负数特性,同时维护最大值与最小值的状态转移方程。 - **416. 分割等和子集** 转化为 0-1 背包问题,通过布尔型 DP 实现子集和判断。 总结对比了三题的状态定义与解法技巧,并延伸至相关变种问题,助你掌握动态规划的核心思想与灵活应用!
109 1
|
9月前
|
算法 容器
【算法】——双指针算法合集(力扣)
移动零,复写零,快乐数,盛最多水的容器,有效三角形的个数,和为s的两个数(查找总价格为目标值的两个商品 ),三数之和,四数之和
|
Python
【Leetcode刷题Python】946. 验证栈序列
LeetCode题目“946. 验证栈序列”的Python解决方案,通过模拟栈的压入和弹出操作来验证给定的两个序列是否能通过合法的栈操作得到。
109 6
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
73 3
|
Python
【Leetcode刷题Python】105. 从前序与中序遍历序列构造二叉树
LeetCode上105号问题"从前序与中序遍历序列构造二叉树"的Python实现,通过递归方法根据前序和中序遍历序列重建二叉树。
106 3
|
算法 Python
【Leetcode刷题Python】300. 最长递增子序列
LeetCode 300题 "最长递增子序列" 的两种Python解决方案:一种使用动态规划,另一种使用贪心算法结合二分查找。
93 1
|
Python
【Leetcode刷题Python】138. 复制带随机指针的链表
LeetCode上题目“138. 复制带随机指针的链表”的Python解决方案,包括两种方法:一种是在每个节点后复制一个新节点然后再分离出来形成新链表;另一种是构建一个字典来跟踪原始节点与其副本之间的映射关系,从而处理新链表的构建。
89 1
|
索引
力扣每日一题 6/17 枚举+双指针
力扣每日一题 6/17 枚举+双指针
75 1