这是悦乐书的第252次更新,第265篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第119题(顺位题号是521)。给定一组两个字符串,您需要找到这组两个字符串中最长的不同子序列。最长的不同子序列被定义为这些字符串之一的最长子序列,并且此子序列不应该是其他字符串的任何子序列。
子序列是可以通过删除一些字符而不改变其余元素的顺序从一个序列导出的序列。任何字符串都是其自身的子序列,空字符串是任何字符串的子序列。输入将是两个字符串,输出需要是最长的不同子序列的长度。如果最长的不同子序列不存在,则返回-1。例如:
输入:“aba”,“cdc”
输出:3
说明:最长的不同子序列是“aba”(或“cdc”),因为“aba”是“aba”的子序列,但不是另外一个字符串的子序列。
注意:
两根字符串的长度都不会超过100。
字符串由a~z的字母组成。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
题目的意思是如果两字符串不存在最长不同子串,也就表明两字符串相等,直接返回-1即可。每个字符串都有一个最长不同子串就是自身,那么要找两个字符串的最长不同子串,也就是看谁的字符串长度更长了,字符串长度更长的那个字符串本身就是最长不同子串。
public int findLUSlength(String a, String b) {
if (a.equals(b)) {
return -1;
}
return a.length() > b.length() ? a.length() : b.length();
}
03 第二种解法
第一种解法的最后一步,也可以使用Math的max方法来写。
public int findLUSlength2(String a, String b) {
if (a.equals(b)) {
return -1;
}
return Math.max(a.length(), b.length());
}
04 小结
算法专题目前已日更超过三个月,算法题文章119+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!