看到有多少种应当想象是否用DP做,文章提示了开辟一个长度为26的数组
存储的是以字母为结尾的字串,例如以b结尾,那么如果有b,ab,zab,yzab即dp[ord(‘b’)-97]=4
class Solution:
def findSubstringInWraproundString(self, p):
"""
:type p: str
:rtype: int
"""
if len(p)<1: return 0
dp=[0]*26
dp[ord(p[0])-97]+=1
curlen=1
for i in range(1,len(p)):
d=ord(p[i])-97
if d-ord(p[i-1])+97==1 or d-ord(p[i-1])+97==-25:#如果是下一个字母
curlen+=1
dp[d]=max(curlen,dp[d])
else:
curlen=1
dp[d]=max(dp[d],1)
return sum(dp)

本文介绍了一种使用动态规划(DP)算法解决特定字符串问题的方法。通过开辟一个长度为26的数组来存储以各字母结尾的子串数量,如以'b'结尾的子串数量,包括'b', 'ab', 'zab', 'yzab'等。文章详细展示了如何通过检查连续字符之间的关系来更新DP数组,从而高效地找到所有符合条件的子串。
1771

被折叠的 条评论
为什么被折叠?



