計畫是這樣的:
查詢所有pdf
用pdf名字
建立資料夾,並將對應的pdf
檔案,移入資料夾
中;
查詢與pdf名字
最接近的***檔案
,並將其移入對應的資料夾
中。
看到明顯是一本書的文字
和音訊資料
:
可以發現,他們都有相同的子字串
,所以先要處理找兩個字串最長公共子串的問題
。
:# 求兩個字串的最長公共子串
# 思想:建立乙個二維陣列,儲存連續位相同與否的狀態
len_s1 =
len(s1)
len_s2 =
len(s2)
# 生成0矩陣,為方便後續計算,多加了1行1列
# 行: (len_s1+1)
# 列: (len_s2+1)
record =[[
0for i in
range
(len_s2+1)
]for j in
range
(len_s1+1)
]
maxnum =
0# 最長匹配長度
p =0# 字串匹配的終止下標
for i in
range
(len_s1)
:for j in
range
(len_s2)
:if s1[i]
== s2[j]
:# 相同則累加
record[i+1]
[j+1
]= record[i]
[j]+
1if record[i+1]
[j+1
]> maxnum:
maxnum = record[i+1]
[j+1
] p = i # 匹配到下標i
# 返回 子串長度,子串
return maxnum, s1[p+
1-maxnum : p+1]
defprintmatrixlist
(li)
:# 列印多維list
row =
len(li)
col =
len(li[0]
)for i in
range
(row)
:for j in
range
(col)
(li[i]
[j], end=
' ')
print(''
)if __name__ ==
"__main__"
:# s1="黑貓英語名著3級 02 alic's adventures in wonderland 艾麗絲漫遊奇境記.pdf"
# s2="艾麗絲漫遊奇境記 alic_s adventures in wonderland 01.***"
s1='abcdef'
s2='bcxdef'
[lenmatch,strmatch]
= getmaxcommonsubstr(s1,s2)
('子串: '
, strmatch)
('子串長度: '
, lenmatch)
# 如果資料是`abcdef`等
子串: def
子串長度: 3
# 如果資料是`艾麗絲`等
子串: s adventures in wonderland
子串長度: 27
對於測試字串為:
s1=
'abcdef'
s2='bcxdef'
明顯看出有2
個公共子串,bc
和def
,上述的方法就是用2個字串
各自的長度建立了乙個矩陣,矩陣數值初始都是0
,乙個字元乙個字元的進行對比,如果字元相等
,就在左上對角線元素的數值上加一
(如下面所示)。
假設字串長度分別為n
和m
,則建立這個矩陣的時候,演算法複雜度為o(nm)
,查詢最大子串的演算法複雜度為o(nm)
,整體演算法的複雜度為2o(nm)
。
理論上,可以把建立矩陣和查詢放在一起,這樣就會優化許多,等我閒了再搞吧,先完成主要目標。
0 b c x d e f
a 0000
00b 1000
00c 0200
00d 0001
00e 0000
20f 0000
03
最終不要忘了初心:
[python]將***和pdf按名字分類歸檔到各自資料夾 :
以上,enjoy~
n個字串找出重複最多的前十個字串
使用優先佇列構建最小堆,不用使用vector陣列再排序,優先佇列詳解 優先佇列和queue不同的就在於我們可以自定義其中資料的優先順序,讓優先順序高的排在佇列前面,優先出隊,優先佇列具有佇列的所有特性,包括基本操作,只是在這基礎上新增了內部的乙個排序,它本質是乙個堆實現的 include stdaf...
java獲取乙個字串在另乙個字串中出現的次數
獲取乙個字串在另乙個字串中出現的次數。abkkcdkkefkkskk 思路 1,定義個計數器。2,獲取kk第一次出現的位置。3,從第一次出現位置後剩餘的字串中繼續獲取kk出現的位置。每獲取一次就計數一次。4,當獲取不到時,計數完成。class stringtest2 return count 練習三...
js如何獲取乙個字串在另外乙個字串中的下標
有字串 a 34 b 123456789 要求定義乙個函式返回b字串中第乙個匹配a字串的下標,不得使用現有的方法 indexof 兩種解決辦法 substr 方法可在字串中抽取從 start 下標開始的指定數目的字元。const b,a return 1 let a 34 let b 1234567...