问题描述
例如,m = 3和n = 2,其中s1 = abc和s2 = de。
首先我们进行比较:
abc
de
and generate tuple (0,1) (as a and e are being compared,so give their indices)
then slide string s2
abc
de
generate (0,0) {compare a and d}
generate (1,1) {compare b and e}
slide string s2
abc
de
generate (1,0) {compare b and d}
generate (2,1) {compare c and e}
slide string s2
abc
de
generate (2,0) {compare c and d}
所以我们以该顺序返回generate(0,1),(0,0),(1,1),(1,0),(2,1),(2,0)
例如,如果m = 2且n = 2
我们将使用滑动较小字符串的相同方法来生成(0,1),(0,0),(1,1),(1,0)。
解决方法
out = (
(i1,i2)
for anchor in range(n-1,-m,-1)
for i1,i2 in enumerate(range(anchor,n))
if 0 <= i1 < m and 0 <= i2 < n
)
测试
for m,n in [(3,2),(2,(5,3)]:
out = (
(i1,i2)
for anchor in range(n-1,-1)
for i1,n))
if 0 <= i1 < m and 0 <= i2 < n
)
print(*out,'',sep='\n')
输出
(0,1)
(0,0)
(1,1)
(1,0)
(2,1)
(2,0)
(0,2)
(0,2)
(1,1)
(3,2)
(2,0)
(3,1)
(4,2)
(3,0)
(4,0)
,
您可以这样做:
m = 3
n = 2
gen = ((j+i,j)
for i in range(1-n,m)
for j in range(max((0,-i)),min((n,m-i))))
for t in gen:
print(t)
给予:
(0,0)
这里:
-
i
是两个字符串的第一个字符之间的偏移量(在您的示例中,从-1到2依次排列) -
j
是第二个字符串(s2)中的索引