from typing import List
classSolution:defmatch(self, s:str, y:str)->bool:iflen(s)<len(y):returnFalsefor i inrange(len(y)):if s[i]!= y[i]:returnFalsereturnTruedefwordBreak(self, s:str, wordDict: List[str])->bool:
l =len(s)
dp =[[0]*(l +1)for col inrange(l +1)]for i inrange(l +1):
dp[i][i]=1for j inrange(1, l +1):for i inrange(l +1- j):for k in wordDict:if dp[i][i + j]==0and self.match(s[i:i + j], k):
dp[i][i + j]= dp[i +len(k)][i + j]return dp[0][l]==1if __name__ =='__main__':
x = Solution()
s ='applepenapple'
wordDict =["apple","pen"]print(x.wordBreak(s, wordDict))print(x.match(s[0:8], wordDict[0]))
23、合并K个排序链表(hard)
初步解法如下,优化解法应该用优先队列,了解c++中的优先队列
from typing import List
classListNode:def__init__(self, val=0,next=None):
self.val = val
self.next=nextclassSolution:defmergeKLists(self, lists: List[ListNode])-> ListNode:
l =len(lists)
ans = ListNode()
temp = ans
minI =0while minI !=-1:
minL =100000
minI =-1for i inrange(l):if lists[i]!=Noneand lists[i].val < minL:
minL = lists[i].val
minI = i
if minI !=-1:
temp.next= ListNode(minL)
temp = temp.next
lists[minI]= lists[minI].nextreturn ans.nextif __name__ =='__main__':
x = Solution()
y = ListNode()
y.next= ListNode(6)
z = ListNode(3)
z.next= ListNode(7)
k = x.mergeKLists([y, z])print(k.val)