动态规划
#10_1.py
# 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
class Solution:
def fib(self, n: int) -> int:
if n==0:return 0
if n==1:return 1
dp=[0]*(n+1)
dp[0]=0
dp[1]=1
for i in range(2,n+1):
dp[i]=dp[i-1]+dp[i-2]
print(dp)
return dp[-1]%(1000000007)
#10_2.py
# 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
class Solution:
def numWays(self, n: int) -> int:
if n==0:return 1
if n==1:return 1
if n==2:return 2
dp=[0]*(n)
dp[0]=1
dp[1]=2
for i in range(2,n):
dp[i]=dp[i-1]+dp[i-2]
print(dp)
return dp[-1]%(1000000007)
#19.py
#请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。
class Solution:
def isMatch(self, s: str, p: str) -> bool:
slen=len(s)
plen=len(p)
dp=[[False]*(plen+1) for _ in range(slen+1)]
dp[0][0]=True
for i in range(plen):
if p[i]=="*":
dp[0][i+1]=dp[0][i-1]
for i in range(slen):
for j in range(plen):
if p[j]=="." or s[i]==p[j]:
dp[i+1][j+1]=dp[i][j]
elif p[j]=="*":
if s[i]!=p[j-1]:
dp[i+1][j+1]=dp[i+1][j-1]
if p[j-1]=="." or s[i]==p[j-1]:
dp[i+1][j+1]=(dp[i][j+1] | dp[i+1][j] | dp[i+1][j-1])
print(dp)
return dp[-1][-1]
#48.py
# 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
# 示例 1:
# 输入: "abcabcbb"
# 输出: 3
# 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
# 示例 2:
# 输入: "bbbbb"
# 输出: 1
# 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
# 示例 3:
# 输入: "pwwkew"
# 输出: 3
# 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
# 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
tmp=0
res=0
d={}
for i in range(len(s)):
j=d.get(s[i],-100)
d[s[i]]=i
if i-j<=tmp:
tmp=i-j
else:
tmp=tmp+1
res=max(res,tmp)
print(res,tmp)
return res