如何解决给定两个整数m和n,其中m> = n,如何创建一个生成器以返回所有滑动窗口?
例如,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)中的索引
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。