# 對於給定list a
for j in
range(1
,len
(a)+1)
:for i in
range
(j):
)
結果在ans中
# 雜湊集合,記錄每個字元是否出現過
occ =
set(
)n =
len(s)
# 右指標,初始值為 -1,相當於我們在字串的左邊界的左側,還沒有開始移動
rk, ans =0,
0for i in
range
(n):
if i !=0:
# 左指標向右移動一格,移除乙個字元
occ.remove(s[i -1]
)while rk < n and s[rk]
notin occ:
# 不斷地移動右指標
occ.add(s[rk]
) rk +=
1# 第 i 到 rk 個字元是乙個極長的無重複字元子串
ans =
max(ans, rk - i)
1.有跳躍
動態規劃:
原問題:長度為n、m的字串的最長公共子串行; 子問題:長度為i,j的字串的最長公共子串行
狀態: dp[i][j]表示word1[:i]和word2[:j]的最長公共子串行的長度
初始化:dp[i][0],dp[0][j]都為0.
狀態轉移方程:dp[i][j] = dp[i-1][j-1]+1 if word1[i-1]==word2[j-1] else max(dp[i-1][j],dp[i][j-1])
n, m =
len(word1)
,len
(word2)
dp =[[
0for _ in
range
(m+1)]
for _ in
range
(n+1)]
for i in
range(1
,n+1):
for j in
range(1
,m+1):
if word1[i-1]
== word2[j-1]
: dp[i]
[j]= dp[i-1]
[j-1]+
1else
: dp[i]
[j]=
max(dp[i-1]
[j],dp[i]
[j-1])
# 最終回溯到dp[k][k],故跳過k到i和k到j之間的不等部分。
2.無跳躍
利用逗號間隔符和字串的比較實現。結果在result中
m =
len(a)
n =len
(b)if m>n:
m, n, a, b = n, m, b, a
tmp_list =
result =
0# 利用','.join([str(i) for i in b])將b轉化為字串且任意兩個元素之間用逗號間隔
str_b =
','+
','.join(
[str
(i)for i in b])+
','#print(type(str_b))
for r in a:
str(r))if
','+
','.join(tmp_list)
+','
in str_b:
result =
max(result,
len(tmp_list)
)else
: tmp_list = tmp_list[1:
]
linux常見考點
1 在linux中,常用檔案的方式訪問裝置 2 linux中每個檔案都用i節點標示 3 全部磁碟又四個部分組成,分別是 引導快 專用塊 i節點表塊和資料儲存塊 4 編寫的shell程式在執行之前必須賦予該指令碼檔案執行許可權 5 核心分為程序管理系統 記憶體管理系統 i o管理系統和檔案管理系統 6...
習題集(2)C的考點
a 巨集理解 程式中定義以下巨集 define s a,b a b,若定義int area 且令area s 3 1,3 4 則變數area的值為 10 3 1 3 4 10 巨集替換只形式上 替換要想當 area 3 1 3 4 c語言裡用巨集 容易出錯地方 b 二維陣列理解 若有定義 int a...
秋招常見考點之HTTP請求
瀏覽器快取機制會用到的協議頭 last modified etag 表示乙個伺服器上的資源的最後修改時間 last modified 標示這個響應資源的最後修改時間。web伺服器在響應請求時,告訴瀏覽器資源的最後修改時間。etag web伺服器響應請求時,告訴瀏覽器當前資源在伺服器的唯一標識,然後通...