题目描述
给你两个字符串,请你从这两个字符串中找出最长的特殊序列。
最长特殊序列 定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)
子序列 可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。
输入为两个字符串,输出最长特殊序列的长度。如果不存在,则返回-1
.
示例1:
输入: a = “aba”, b = “cdc”
输出: 3
解释: 最长特殊序列可为“aba”(或“cdc”),两者均为自身的子序列且不是对方的子序列。
示例2:
输入: a = “aaa”, b = “aaa”
输出: -1
提示:
- 两字字符串长度均处于区间
[1, 100]
; - 字符串中的字符含有
a-z
;
思路分析
难度是简单 ,这道题感觉没有什么营养,但是还是写一下。这里分析a,b
的字符创长度,可分三种情况讨论:
a.equals(b)
时,即两个字符串相同,返回-1
;!a.equals(b)
但a.length() == b.length()
,返回s.length()
即可,s
选择a,b
均可;!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。