求陣列中兩個字串的最小距離 Python 版

2021-08-13 08:59:46 字數 2535 閱讀 2987

題目

給定乙個陣列 strs,其中的資料都是字串,給定兩個字串 str1,str2。如果這兩個字串都在 strs陣列中,就返回它們之間的最小距離;如果其中任何乙個不在裡面,則返回 -1;如果兩個字串相等,則返回 0。

例如:給定[『*』,』3』,』*』,』5』,』10』,』9』,』7』,』1』,』*』],再給定兩個字串』* 『和』9』,通過函式求得返回值 3。

分析

有兩種方法,

方法1:遍歷陣列 strs,分別記錄兩個 str1 和 str2 的位置。求得最小的乙個距離數字。這樣做時間複雜度為 o(n^2)。

方法2

如果查詢的次數非常多,為了提高查詢的效率,構造hash表,把每次查詢的時間複雜度下降到 o(1)。

python 的內建 dict 型別就是雜湊表,實現方法也是hash 表,其查詢的時間複雜度就是 o(1)。雜湊表的構造也分很多種:

比如,構造 hash 表,key值是strs中的每乙個字串,value值是乙個hash表,裡面存放著該字串到其它字串的最小距離。

寫成**就是:hash_table = }

當然這種方法的空間複雜度是 o(n^2)

**

def

min_distance_1

(strs, str1, str2):

''' 陣列中兩個字串的最小距離,這是方法1,時間複雜度 o(n^2)

:param strs: 給定的陣列中存放有多個字串

:param str1: 第乙個字串

:param str2: 第二個字串

:return: 如果其中給定的乙個字串不在陣列 strs 中,那麼返回-1,否則返回兩個字串之間的最小間距

'''if str1 not

in strs or str2 not

in strs:

return -1

if str1 == str2:

return

0 dist, min = 1, len(strs)

pos1, pos2 = 0, len(strs)

for i in xrange(0, len(strs)):

if str1 == strs[i]:

pos1 = i

for j in xrange(0, len(strs)):

if str2 == strs[j]:

pos2 = j

dist = abs(pos1 - pos2)

if dist < min:

min = dist

return min

defmin_distance_2

(strs, str1, str2):

''' 陣列中兩個字串的最小距離,這是方法2,如果查詢的次數非常多,把每次查詢的時間複雜度下降到 o(1)。

python 的內建 dict 型別就是雜湊表,實現方法也是hash 表,其查詢的時間複雜度就是 o(1)。雜湊表的構造也分很多種:

比如,構造 hash 表,key值是strs中的每乙個字串,value值是乙個hash表,裡面存放著該字串到其它字串的最小距離。

寫成**就是:hash_table = }

當然這種方法的空間複雜度是 o(n^2)

:param strs: 給定的陣列中存放有多個字串['*','3','*','5','10','9','7','1','*']

:param str1: 第乙個字串, '*'

:param str2: 第二個字串, '9'

:return: 如果其中給定的乙個字串不在陣列 strs 中,那麼返回-1,否則返回兩個字串之間的最小間距

'''if str1 not

in strs or str2 not

in strs:

return -1

if str1 == str2:

return

0def

create_hash

(strs):

# 建立 hash 的過程並不在查詢裡

strs_set = list(set(strs))

dist_hash = {}

for i in xrange(0, len(strs_set)):

temp = {}

for j in xrange(0, len(strs_set)):

if strs_set[i] != strs_set[j]:

dist = min_distance_1(strs, strs_set[i], strs_set[j])

temp[strs_set[j]] = dist

dist_hash[strs_set[i]] = temp

return dist_hash

return create_hash(strs)[str1][str2]

計算兩個字串的距離

題目描述 對於不同的字串,希望能夠有辦法判斷其相似程度。定義了如下方法來把兩個不同的字串變得相同,具體的操作方法為 1.修改乙個字元 如把 a 替換為 b 2.增加乙個字元 如把 abc 變換為 aabc 3.刪除乙個字元 如把 abc 變換為 bc 比如,對於 abc 和 bc 兩個字串來說,可以...

求兩個字串的距離

給定兩個長度相等的,由小寫字母組成的字串s1和s2,定義s1和s2的距離為兩個字串有多少個位置上的字母不相等。現在牛牛可以選定兩個字母x1和x2,將s1中的所有字母x1均替換成x2。x1和x2可以相同 牛牛希望知道執行一次替換之後,兩個字串的距離最少為多少。x1和x2是自己求的,未知 輸入 aaa ...

計算兩個字串的距離演算法

題目的描述為 將乙個字串變成另乙個字串,方式為新增乙個字元,刪除乙個字元,替換乙個字元,求這些操作的做小次數,例如字串db adcb 兩個字串,通過新增a和c兩個字元獎db編輯成adcb,這個兩個字串的距離為2 思路 定義乙個二維代價陣列dp n m 設新增乙個字元的代價為 ic inseret c...