LeetCode_392.Is Subsequence_路漫漫远修兮

本文介绍了一种高效的算法,用于判断一个短字符串是否为长字符串的子序列。通过对比两种不同的实现方式,展示了简洁代码的重要性,并总结了关键编程技巧。

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

一、原题目

Given a string s and a string t, check if sis subsequence of t.

You may assume that there is only lower case English letters in both s and tt is potentially a very long (length ~= 500,000) string, and s is a short string (<=100).

A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ace" is a subsequence of "abcde" while "aec" is not).

 
二、题目大意

这个题目的意思很简单,就是给定一个很长的字符串t和很短的字符串s,判断s是否是t的字串。

但是与普通不同的是可以通过删除t中字母,来构造s,并且有相对位置的先后顺序要求。

 
三、思路分析


别人的思路:


首先对t构造一个迭代器,再利用for循环和all判断是否是字串

 

自己的思路:


先遍历s中的每一个字母,看是否在t中出现,如果出现就把在t中出现的位置记录下来,存储到res列表中。如果没有出现,就直接返回False,(因为在s中出现,而在t中没有出现,显然不是字串)。接下来去遍历res,如果第i个位置的元素大于第i+1个元素,则不符合题目要求,因为相对位置不对。如果在遍历过程中没有返回false,就返回true

显然自己的思路显得很复杂了,而且还考虑不全面,就是单单通过索引来控制相对位置本人处理不好。您或许可以想想那种情况会出错,如果有兴趣的话?

 

四、具体代码

作者的代码:

class Solution:
    def isSubsequence(self, s, t):
           t = iter(t)
           return all(c in t for c in s)

 

本人的代码:

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        res=[]
        for i in range(len(s)):
            if t.find(s[i])!=-1:
                m=t.find(s[i])
                res.append(m)
            else:
                return False
        for j in range(len(res)-1):
            if res[j]>res[j+1]:
                return False
        return True

 

五、两者差别

作者的思路精简,相对位置处理很好,作者是通过for循环中的”同时满足,才返回true“来保证相对位置的,运用的很巧妙。

自己的思路就比较复杂了,是通过“字母下标的有序性“来保证相对位置的。自己代码通不过的一个原因就是如果t中出现多个相同的字母,那么就会得到同一个下标,这是不行的,会出错的。而这是因为自己使用了find函数

六、知识点总结

1.iter的用法 :Python 3中关于iter(object[, sentinel)]方法有两个参数

iter(object)

1 lst = [1, 2, 3]
2 for i in iter(lst):
3     print(i)
执行结果:

1
2
3

iter(object, sentinel)  用的少,这种方式

2.all的用法:

对于all函数,如果元素全为真则返回True,否则返回假。即只要存在为假的元素就返回假。
对于any函数,只要存在一个为真的元素就返回True。不存在为真的元素返回假。
另外,当可迭代对象为空时,all函数返回True,any函数返回False。这是因为iterable为空时遍历不执行。

3.相对位置的控制思路

 

 

七、来源


题目连接:https://leetcode.com/problems/is-subsequence/

作者原文解答:https://leetcode.com/problems/is-subsequence/discuss/87258/2-lines-Python

 
座右铭:站在别人的思想上,看见自己的不足,传播错误的经验,愿君不重蹈覆辙。

 

由于受限于本人经验,难免不足,如有建议,欢迎留言交流。
--------------------- 
作者:路漫漫,远修兮 
来源:优快云 
原文:https://blog.youkuaiyun.com/qq_41827968/article/details/88750109 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值