算法修炼之路—【字符串】Leetcode 521 最长特殊序列I

题目描述

给你两个字符串,请你从这两个字符串中找出最长的特殊序列。

最长特殊序列 定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)

子序列 可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。

输入为两个字符串,输出最长特殊序列的长度。如果不存在,则返回-1.

示例1:

输入: a = “aba”, b = “cdc”
输出: 3
解释: 最长特殊序列可为“aba”(或“cdc”),两者均为自身的子序列且不是对方的子序列。

示例2:

输入: a = “aaa”, b = “aaa”
输出: -1

提示:

  1. 两字字符串长度均处于区间[1, 100]
  2. 字符串中的字符含有a-z;

思路分析

难度是简单 ,这道题感觉没有什么营养,但是还是写一下。这里分析a,b的字符创长度,可分三种情况讨论:

  1. a.equals(b)时,即两个字符串相同,返回-1;
  2. !a.equals(b)a.length() == b.length(),返回s.length()即可,s选择 a,b均可;
  3. !a.equals(b)a.length() != b.length(), 返回Math.max(a.length(), b.length()),此情况可与情况2合并;

解题代码

    public static int solution(String a, String b) {
        if(b.equals(a))
            return -1;
        return Math.max(a.length(), b.length());
    }

复杂度分析

这里我们设m,n为输入字符串的长度;

时间复杂度: 我们对字符串进行了equals的比较判断,故时间复杂度为O(min(m, n));
空间复杂度: 没有借助辅助容器,故空间复杂度为O(1);

Github源码

完整可运行文件请访问GitHub

猜你喜欢

转载自blog.csdn.net/u011106767/article/details/106032979