一、寻找子序列
方法一:while循环
class Solution:
def isSubsequence(self, s, t):
i = 0
j = 0
res = 0
while i < len(s) and j < len(t):
if s[i] == t[j]:
res += 1
i+=1
j+=1
return res == len(s)
a=Solution()
a.isSubsequence(s,t)
方法二:for循环
class Solution:
def isSubsequence(self, s, t):
res = 0
for j in range(len(t)):
for i in range(res,len(s)):
if i+j>len(s):
return False
if s[i]!=t[j+i]:
break
else:
res+=1
return res == len(s)
a=Solution()
a.isSubsequence(s,t)
循环过程:
s=‘bed’
t=‘abde’
j=0
i=0
s[0]!=t[0]
#不满足if跳出内层循环
j=1
s[0]=t[1]
#满足条件res=0+1,并继续内层循环
i=1
j=1
s[1]!=t[2]
#不满足if跳出内层循环
j=2
i=res=1
s[1]==t[3]
#满足条件res=0+1+1,并继续内层循环
i=2
j=2
s[2]?=t[4](t[4]超过了长度返回FALSE)
#直到res长度和s相等,返回true
方法三:利用find函数
以下两个思路一致(在t的pos位置匹配到s的字符后,s的下一个字符就开始从pos+1位置开始遍历,直到所有s的字符得到匹配才会返回True)
class Solution:
def isSubsequence(selft,s,t):
for i in s:
res=t.find(i)
if res==-1:
return False
else:
t=t[res+1:]
return True
a=Solution()
a.isSubsequence(s,t)
#循环过程
s='bed'
t='abde'
i=b
t.find('b')
res=1
t=t[2:]
i=e
t.find('e')
res=1
t=t[2:]
i=d
t.find('d')
return False
方法四:利用index函数
class Solution:
def isSubsequence(self, s: str, t: str) -> bool:
end = len(t)
start = 0
for i in s:
if start >= end:
return False
if i not in t[start:end]:
return False
else:
start = t.index(i,start,end) + 1
return True
a=Solution()
a.isSubsequence(s,t)
二、break/continue/return区别
-
break 和 continue
用于for 或 while 循环中;
break 退出时当级整个循环(如果使用嵌套循环,break语句将停止执行最深层的循环,并开始执行外层循环)
continue退出是当级本次循环,会继续执行下次循环;
break 和 continue 下方代码都不会执行; -
return
用于function 函数中;
当return 后面没接代码,返回当前函数的初始位置,不会返回任何结果;
return 可以返回一个函数的执行结果;
return 下方代码不会执行;
实例:
play = "ssamba"
for x in play:
print(x)
if x == "m":
break
print("----")
s
----
s
----
a
----
m
#####
for x in play:
print(x)
if x == "m":
continue
print("----")
#结果如下:
s
----
s
----
a
----
m
b
----
a
----
for i in [1, 2, 3]:
print(i)
for a in [4, 5, 6]:
if a == 5:
# break 跳出也是本级的for 循环中,且break之后print(a)不执行
break
print(a)
#结果如下:
1
4
2
4
3
4
三、快速寻找质数(for else:作用是for循环中if条件一直不满足,则最后就执行else语句。)
for num in range(20,30):
for i in range(2,num):
if num%i==0:
j=num/i
print ('%d等于%d*%d'%(num,i,j))
#break:寻找到第一个约束即停止,不再寻找i的其他约数
break
#else写在if外层与for平行,则最后就执行else语句,否则与if平行会打印多个‘num是一个质数’;
else:
print ('%d是一个质数'%(num))
#结果如下:
20等于2*10
21等于3*7
22等于2*11
23是一个质数
24等于2*12
25等于5*5
26等于2*13
27等于3*9
28等于2*14
29是一个质数
2020.07.29
开始刷leetcode啦;)