演算法題 編輯距離(Python)

2021-10-14 20:00:47 字數 1277 閱讀 1474

給定n個長度不超過10的字串以及m次詢問,每次詢問給出乙個字串和乙個操作次數上限。

對於每次詢問,請你求出給定的n個字串中有多少個字串可以在上限操作次數內經過操作變成詢問給出的字串。

每個對字串進行的單個字元的插入、刪除或替換算作一次操作。

輸入格式

第一行包含兩個整數n和m。

接下來n行,每行包含乙個字串,表示給定的字串。

再接下來m行,每行包含乙個字串和乙個整數,表示一次詢問。

字串中只包含小寫字母,且長度均不超過10。

輸出格式

輸出共m行,每行輸出乙個整數作為結果,表示一次詢問中滿足條件的字串個數。

資料範圍

1≤n,m≤1000

輸入樣例:

3 2

abcacd

bcdab 1

acbd 2

輸出樣例:

1

3

n, m = map(int, input().split())

# a->b的距離

def edit_distance(a, b):

n1, n2 = len(a), len(b)

dp = [[0]*(n2+1) for _ in range(n1+1)]

for i in range(n1+1): dp[i][0] = i

for i in range(n2+1): dp[0][i] = i

for i in range(1, n1+1):

for j in range(1, n2+1):

dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + 1

if a[i-1] == b[j-1]:

dp[i][j] = min(dp[i][j], dp[i-1][j-1])

else:

dp[i][j] = min(dp[i][j], dp[i-1][j-1]+1)

return dp[-1][-1]

s =

for _ in range(n):

for _ in range(m):

b, k = map(str, input().split())

k = int(k)

res = 0

for a in s:

x = edit_distance(a, b)

if x <= k: res += 1

print(res)

最短編輯距離 python 最短編輯距離演算法實現

一,演算法介紹 在cs124課程的第一周提到 求解兩個字串相似度的演算法 minimum edit distance 最短編輯距離 演算法。該演算法在nlp 自然語言處理 中也會用到。如何定義相似度呢?任給兩個字串x 和y,使用以下三種操作將 字串x 變到 字串y 插入 insert 操作 刪除操作...

編輯距離及編輯距離演算法

編輯距離概念描述 編輯距離,又稱levenshtein距離,是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sitting g 俄...

編輯距離及編輯距離演算法

include include include using namespace std const int max 1001 int maxlen max max int maxlen string str1,string str2 return maxlen len1 len2 int main ...