二叉樹,鍊錶,字串
思路:進行兩次反轉
1.對整個句子反轉;2..對句子中的單詞反轉
經過三次反**
1.反轉前面的字串。2.反轉後面的字串。3.反轉整個字串
不能直接用力扣46全排列的**,力扣46是無重複的數字,這個題是有重複的。
正確的解法:不用not in tmp來判斷這個字母是否需要遍歷,定義乙個used矩陣來判斷,就不會去重了。
兩種方法:
1.用乙個棧空間複雜度是o(n)
2.直接在原煉表上操作,空間複雜度是o(1)
思路是,用快慢指標判斷中點位置,然後翻轉後面的乙個鍊錶,然後比較前後鍊錶。
# definition for singly-linked list.
# class listnode(object):
# def __init__(self, x):
# self.val = x
# self.next = none
class solution(object):
def reverse(self,head):
if not head.next:
return head
dummy=listnode(0)
dummy.next=head
pre=dummy
cur=dummy.next
curnext=dummy.next.next
cur.next=none
pre=cur
cur=curnext
curnext=curnext.next
while cur.next:
cur.next=pre
pre=cur
cur=curnext
curnext=curnext.next
cur.next=pre
return cur
def ispalindrome(self, head):
""":type head: listnode
:rtype: bool
"""if head is none or head.next is none:
return true
if head.next.next is none:
return head.val == head.next.val
#用快慢指標找到前半部分,後半部分。對後半部分鍊錶進行反轉。
slow=head
fast=head
while fast.next and fast.next.next:
slow=slow.next
fast=fast.next.next
#後半部分是slow.next
解題思路:
1.分冶法,統計字串各個字元出現的次數,如果有字元數量少於k,那麼包含這個位置的子串統統不成立。
遞迴地求解前半部分和後半部分。
2.光用遞迴會超時,先去除一下字串左右邊界不符合條件的部分。
lass solution(object):
def getcount(self,s):
count_dic={}
for i in range(len(s)):
count_dic[s[i]]=count_dic.get(s[i],0)+1
return count_dic
def longestsubstring(self, s, k):
""":type s: str
:type k: int
:rtype: int
"""#s中每個字母出現次數
count_dic=self.getcount(s)
#如果全部滿足條件,返回s的長度
flag=true
for value in count_dic.values():
if value
flag=false
if flag:
return len(s)
#去掉邊界不滿足條件的
left=0
right=len(s)-1
while count_dic[s[left]]
left=left+1
while count_dic[s[right]]
right=right-1
s=s[left:right+1]
count_dic=self.getcount(s)
#如果全部滿足條件,返回s的長度
flag=true
for value in count_dic.values():
if value
flag=false
if flag:
return len(s)
#不滿足條件,從不滿足條件的字母處分割
for i in range(len(s)):
if count_dic[s[i]]
left=self.longestsubstring(s[:i],k)
right=self.longestsubstring(s[i+1:],k)
return max(left,right)
return 0
leetcode 劍指 Offer 專題(七)
劍指 offer 專題第七部。題目 劍指 offer 66.構建乘積陣列。定義 begin v 1 i prod a k a 0 times a 1 times dots times a i 1 quad v 1 0 1 v 2 i prod a k a i 1 times dots times a...
Leetcode劍指offer系列 平衡二叉樹
傳送門 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,nul...
LeetCode 劍指offer刷題10 1
leetcode 劍指offer刷題 劍指 offer 10 i.斐波那契數列 寫乙個函式,輸入 n 求斐波那契 fibonacci 數列的第 n 項。斐波那契數列的定義如下 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.斐波那契數列由 0 和 1 開始,之後的斐波那契數就是...