一、原题目
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 t. t 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
版权声明:本文为博主原创文章,转载请附上博文链接!