字串距離

2021-10-09 17:57:16 字數 1454 閱讀 2765

給出兩個相同長度的由字元 a 和 b 構成的字串,定義它們的距離為對應位置不同的字元 的數量。如串」aab」與串」aba」的距離為 2;串」ba」與串」aa」的距離為 1;串」baa」和串」baa」的 距離為 0。下面給出兩個字串 s 與 t,其中 s 的長度不小於 t 的長度。我們用|s|代表 s 的 長度,|t|代表 t 的長度,那麼在 s 中一共有|s|-|t|+1 個與 t 長度相同的子串,現在你需要計 算 t 串與這些|s|-|t|+1 個子串的距離的和。

注:t和s的上限不是105而是1e5

第一行包含乙個字串 s。

第二行包含乙個字串 t。

s和t均由字元a和b組成,1≤ |t| ≤ |s| ≤105。

輸出對應的答案。
輸入

輸出說明

aaabb

bab5

」aaa」與」bab」的距離為 2,」aab」與」bab」的距離為 1,」abb」與」bab」的距離為 2,

所以最後答案為 5。

解題思路:

目標字串與匹配字串的子串進行距離計算,再求和的過程,等價於目標字串第i個字元與匹配字串[i:i+len](len為目標字串的長度)的不同的數量的和;

count_t=[0,0] #分別用來計算"a","b"的數量

s_l=len(s)-len(t)+1

result=0

for i in range(len(t)):

if i==0:

a_l=s[i:i+s_l].count("a")

count_t[0]=a_l

count_t[1]=s_l-a_l

else:

#視窗向右滑動,左側少了乙個字元,右側多了乙個字元,判定這兩個字元的型別,就可以根據上乙個子字串中a,b的數量,計算當前視窗a,b的數量

if s[i-1]=='a':

count_t[0]-=1

else:

count_t[1]-=1

if s[i+s_l-1]=='a':

count_t[0]+=1

else:

count_t[1]+=1

#print(count_t)

# 如果目標字元為"a",則"b"的數量即為不同數量,同樣,如果目標字元為"b",則"a"的數量即為不同數量;

if t[i]=="a":

result+=count_t[1]

else:

result+=count_t[0]

print(result)

字串的距離

題目 題意 設有字串x,我們稱在x的頭尾及中間插入任意多個空格後構成的新字串為x的擴充套件串,如字串x為 abcbcd 則 字串 abcb cd a bcbcd 和 abcb cd 都是x的擴充套件串,這裡 代表空格字元。如果a1是字串a的擴充套件串,b1是字串b的擴充套件串,a1與b1具有相同的長...

編輯字串距離

題目 題意 編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另 乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪 除乙個字元。例如將kitten轉化成sitting sitten k s sittin ...

字串編輯距離

題目描述 給定乙個源串和目標串,能夠對源串進行如下操作 在給定位置上插入乙個字元 替換任意字元 刪除任意字元 寫乙個程式,返回最小運算元,使得對源串進行這些操作後等於目標串,源串和目標串的長度都小於2000。關於字串最短編輯距離的解題思路 給定相關資料的定義 mep i j 表示源字串source ...