Leetcode学习(20)—— Longest Uncommon Subsequence I

本文介绍了一种算法,用于找出两个字符串中最长的不常见子序列及其长度。通过比较两个字符串的长度和内容,文章详细解释了如何高效地解决这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a group of two strings, you need to find the longest uncommon subsequence of this group of two strings. The longest uncommon subsequence is defined as the longest subsequence of one of these strings and this subsequence should not be any subsequence of the other strings.

A subsequence is a sequence that can be derived from one sequence by deleting some characters without changing the order of the remaining elements. Trivially, any string is a subsequence of itself and an empty string is a subsequence of any string.

The input will be two strings, and the output needs to be the length of the longest uncommon subsequence. If the longest uncommon subsequence doesn’t exist, return -1.


给定一组两个字符串,您需要找到这组两个字符串中最长的不常见的子序列。 最长的不寻常的子序列被定义为这些字符串之一的最长子序列,并且该子序列不应该是其他字符串的任何子序列。

子序列是可以通过删除一些字符而不改变剩余元素的顺序从一个序列导出的序列。 简而言之,任何字符串本身都是一个子序列,空字符串是任何字符串的子序列。

输入将是两个字符串,输出需要是最长的不常见子序列的长度。 如果最长不常见的子序列不存在,则返回-1。


Example 1:
Input: "aba", "cdc"
Output: 3
Explanation: The longest uncommon subsequence is "aba" (or "cdc"), 
because "aba" is a subsequence of "aba", 
but not a subsequence of any other strings in the group of two strings. 

Note:

Both strings’ lengths will not exceed 100.
Only letters from a ~ z will appear in input strings.


class Solution(object):
    def findLUSlength(self, a, b):
        return -1 if a==b else max(len(a),len(b))

这里写图片描述


思路:

对于字符串A,B,当len(A)> len(B),A或B中最长的子序列为A,B的任何子序列都不能等于A.答案:len(A)。

当len(A)== len(B)时,B等于A的唯一子序列是B; 所以只要A!= B,答案依然是len(A)。

当A == B时,A的任何子序列都可以在B中找到,反之亦然,所以答案是-1。


另一种方法:
使用 亦或 处理

class Solution(object):
    def findTheDifference(self, s, t):
        return chr(reduce(operator.xor, map(ord, s + t)))

将 s 与 t 拼接,并将其中所有的 ascii 字符 转换成 对应的 十进制数字,
对这些数字进行 亦或 处理,将最后得到的 十进制数字 转换成 ascii 字符,此字符即为随机添加的那个字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值