python学习打卡第四天

一、寻找子序列
方法一: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区别

  1. break 和 continue
    用于for 或 while 循环中;
    break 退出时当级整个循环(如果使用嵌套循环,break语句将停止执行最深层的循环,并开始执行外层循环)
    continue退出是当级本次循环,会继续执行下次循环;
    break 和 continue 下方代码都不会执行;

  2. 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啦;)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值