算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
今天和大家聊的问题叫做 最长特殊序列 Ⅰ,我们先来看题面:
https://leetcode-cn.com/problems/longest-uncommon-subsequence-i/
Given two strings a and b, return the length of the longest uncommon subsequence between a and b. If the longest uncommon subsequence does not exist, return -1.
An uncommon subsequence between two strings is a string that is a subsequence of one but not the other.
A subsequence of a string s is a string that can be obtained after deleting any number of characters from s.
For example, "abc" is a subsequence of "aebdc" because you can delete the underlined characters in "aebdc" to get "abc". Other subsequences of "aebdc" include "aebdc", "aeb", and "" (empty string).
给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列 。如果不存在,则返回 -1 。
「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。
字符串 s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。
例如,“abc” 是 “aebdc” 的子序列,因为您可以删除 “aebdc” 中的下划线字符来得到 “abc” 。“aebdc” 的子序列还包括 “aebdc” 、 “aeb” 和 “” (空字符串)。
示例
示例 1:
输入: a = "aba", b = "cdc"
输出: 3
解释: 最长特殊序列可为 "aba" (或 "cdc"),两者均为自身的子序列且不是对方的子序列。
示例 2:
输入:a = "aaa", b = "bbb"
输出:3
解释: 最长特殊序列是“aaa”和“bbb”。
示例 3:
输入:a = "aaa", b = "aaa"
输出:-1
解释: 字符串a的每个子序列也是字符串b的每个子序列。同样,字符串b的每个子序列也是字符串a的子序列。
解题
这个题目一看上去晦涩难懂,根本不知道在说啥,其实意思就是说,给你俩个字符串,让你看看这两个字符串中最长的不能由另外一个字符串删掉某些字符实现的字符串是什么,返回这个最长的长度。
其实你这样想:
如果两个字符串A和B,如果A比B的长度大,那么A肯定不能由B删除某些字符得到啊,那么A的长度肯定就是这个最大长度了。
其次,如果A和B等长的话,看他们是不是相等的,如果相等的那么一个字符串肯定能由另外一个字符串不用删除都等得到啊。
最后如果A和B等长并且他们还不相等,那么其中字符串A肯定就不能由字符串B删除字符之后得到,因为人家本来长度都相等了,你再删除肯定短了嘛,不可能再相等了。
class Solution {
public int findLUSlength(String a, String b) {
int lenA = a.length();
int lenB = b.length();
if(lenA != lenB)
return Math.max(lenA,lenB);
else{
if(a.equals(b))
return -1;
else
return lenA;
}
}
}
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。
上期推文: