Python 兩字串對齊(預比對)

2021-10-07 02:48:42 字數 3195 閱讀 2465

# -*- coding: utf-8 -*-

"""created on sun jun 7 23:34:21 2020

@author: kerui

"""def

edit

(str1, str2)

: matrix =

[[i + j for j in

range

(len

(str1)+1

)]for i in

range

(len

(str2)+1

)]# print(matrix)

# print("**********===")

for i in

range(1

,len

(str2)+1

):for j in

range(1

,len

(str1)+1

):if str1[j -1]

== str2[i -1]

: d =

0else

: d =

1 matrix[i]

[j]=

min(matrix[i -1]

[j]+

1, matrix[i]

[j -1]

+1, matrix[i -1]

[j -1]

+ d)

# print(matrix)

str1mark =

'' str2mark =

'' indexi =

len(str2)

indexj =

len(str1)

# 從右下角單元格回溯,若ai=bj,則回溯到左上角單元格;

# 若ai≠bj,回溯到左上角、上邊、左邊中值最小的單元格,

# 若有相同最小值的單元格,優先順序按照左上角、上邊、左邊的順序。

# 若回溯到左上角單元格,將ai新增到匹配字串a,將bj新增到匹配字串b;

# 若回溯到上邊單元格,將bi新增到匹配字串b,將_新增到匹配字串a;

# 若回溯到左邊單元格,將_新增到匹配字串b,將aj新增到匹配字串a;

if str1[indexj-1]

== str2[indexi-1]

: str1mark =

"+"+str1[indexj-1]

+ str1mark

str2mark =

"+"+str2[indexi-1]

+ str2mark

indexi -=

1 indexj -=

1for i in

range(1

,len

(str1)

+len

(str2)+1

):print

(indexi,indexj)

if indexi ==

0and indexj ==0:

break

elif indexi ==0:

str1mark =

'+'+ str1[indexj-1]

+ str1mark

str2mark =

'+'+

'佔'+ str2mark

indexj -=

1elif indexj ==0:

str1mark =

'+'+

'佔'+ str1mark

str2mark =

'+'+ str2[indexi-1]

+ str2mark

indexi -=

1else

: minnum =

min(matrix[indexi -1]

[indexj -1]

, matrix[indexi]

[indexj -1]

, matrix[indexi -1]

[indexj]

)if matrix[indexi -1]

[indexj -1]

== minnum:

str1mark = str1[indexj-1]

+ str1mark

str2mark = str2[indexi-1]

+ str2mark

if str1[indexj-1]

== str2[indexi-1]

: str1mark =

"+"+ str1mark

str2mark =

"+"+ str2mark

else

: str1mark =

'+'+ str1mark

str2mark =

'+'+ str2mark

indexi -=

1 indexj -=

1elif matrix[indexi -1]

[indexj]

== minnum:

str1mark =

'+'+

'佔'+ str1mark

str2mark =

'+'+str2[indexi-1]

+ str2mark

indexi -=

1elif matrix[indexi]

[indexj -1]

== minnum:

str1mark =

'+'+str1[indexj-1]

+ str1mark

str2mark =

'+'+

'佔'+ str2mark

indexj -=

1print

(str1mark)

print

(str2mark)

return matrix[

len(str2)][

len(str1)]a=

"你是是如發包方有證雖去為採包方無法完全用行木合同而承包方無法提供有效的擔保時"

b="你是是如發包方有證雖去為採包方無法完全用行木合同而承包方無法提供有效的擔保時"

c=edit(a,b)

print

("\033[0m"

,c)

字串比對

題目內容 題目說起來很簡單,你會讀到兩個字串,每個字串佔據一行,每個字串的長度均小於10000字元,而且第乙個字串的長度小於第二個字串的。你的程式要找出第乙個字串在第二個字串中出現的位置,輸出這些位置,如果找不到,則輸出 1。注意,第乙個字元的位置是0。注意,第乙個字串在第二個字串中的位置可能不止一...

字串比對

題目內容 題目說起來很簡單,你會讀到兩個字串,每個字串佔據一行,每個字串的長度均小於10000字元,而且第乙個字串的長度小於第二個字串的。你的程式要找出第乙個字串在第二個字串中出現的位置,輸出這些位置,如果找不到,則輸出 1。注意,第乙個字元的位置是0。注意,第乙個字串在第二個字串中的位置可能不止一...

字串比對

題目內容 題目說起來很簡單,你會讀到兩個字串,每個字串佔據一行,每個字串的長度均小於10000字元,而且第乙個字串的長度小於第二個字串的。你的程式要找出第乙個字串在第二個字串 現的位置,輸出這些位置,如果找不到,則輸出 1。注意,第乙個字元的位置是0。注意,第乙個字串在第二個字串中的位置可能不止一處...