1.
"""
給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重復字符的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 因為無重復字符的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。
"""
def choose(msg):
lst=[]
for i in range(len(msg)):
for j in range(i+1,len(msg)+1):
m=msg[i:j]
if len(set(m)) == len(m):
lst.append(m)
lst=list(sorted(lst,key=lambda x:len(x)))
if len(lst)==0:
return 0
return len(lst[-1])
print(choose(""))
#經測試可以實現功能
#但是超過時間限制
def Substring(s):
st = {}
i, ans = 0, 0
for j in range(len(s)):
if s[j] in st:
i = max(st[s[j]], i)
ans = max(ans, j - i + 1)
st[s[j]] = j + 1
return ans
測試 s="abbccd
j=0時

j=1時

j=2時
此時循環到s[2]即第二個b
b前面有兩個字符,因此 i 被賦值為2

j=3時

j=4時
此時循環到s[4]即第二個c
c前面有四個字符,因此 i 被賦值為4

j=5時

i的作用就是當出現重復字符的時候,把當前字符前面的字符個數賦值給i
ans = max(ans, j - i + 1)
使ans能夠在出現重復字符的時候鎖定住,直到出現更長的無重復的字符串
2.
"""題目描述
輸入一行字符串,計算其中A-Z大寫字母出現的次數
輸入描述:
案例可能有多組,每個案例輸入為一行字符串。
輸出描述:
對每個案例按A-Z的順序輸出其中大寫字母出現的次數。
"""
def socelt(msg):
import re
lst=re.findall("[A-Z]",msg)
return len(lst)
3.
"""
給定兩個大小為 m 和 n 的有序數組 nums1 和 nums2。
請你找出這兩個有序數組的中位數,並且要求算法的時間復雜度為 O(log(m + n))。
你可以假設 nums1 和 nums2 不會同時為空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
則中位數是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
則中位數是 (2 + 3)/2 = 2.5
"""
def findMedianSortedArrays(self, nums1, nums2):
nums1.extend(nums2)
res = nums1
if not res:
return None
if len(res)==1:
return res[0]
res.sort()
if len(res)%2==0:
res_ind=int(len(res)/2)
return (res[res_ind-1] + res[res_ind]) / 2
else:
res_ind = int(len(res) //2)
return res[res_ind]
4.給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。
說明:每次只能向下或者向右移動一步。
示例:
輸入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
輸出: 7
解釋: 因為路徑 1→3→1→1→1 的總和最小。
lst=[
[1,3,1],
[1,5,1],
[4,2,1]
]
|
1
2
3
4
5
6
7
8
9
10
|
rows=len(lst)
cols=len(lst[0])
for
i
in
range(rows-2,-1,-1):
lst[i][-1] += lst[i+1][-1]
for
i
in
range(cols-2,-1,-1):
lst[2][i] += lst[2][i+1]
for
i
in
range(rows-2,-1,-1):
for
k
in
range(cols - 2, -1, -1):
lst[i][k]+=min(lst[i][k+1],lst[i+1][k])
print(lst[0][0])
|
5.給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。
例如,給定三角形:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
自頂向下的最小路徑和為 11(即,2 + 3 + 5 + 1 = 11)。
說明:
如果你可以只使用 O(n) 的額外空間(n 為三角形的總行數)來解決這個問題,那么你的算法會很加分
|
1
2
3
4
5
6
7
8
9
10
11
|
lst=[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
cow=len(lst)
for
i
in
range(cow-2,-1,-1):
for
index
in
range(0,len(lst[i])):
lst[i][index]+=min(lst[i+1][index],lst[i+1][index+1])
print(lst[0][0])
|
