给定m≥n的两个整数,如何实现生成器返回所有滑动窗口?
字符串滑动比较生成索引元组的逻辑
我来给你拆解清楚这个滑动比较的逻辑,核心就是通过滑动较短的字符串(长度相同时滑动任意一个),依次配对两个字符串中对应比较位置的索引,最终按顺序输出所有元组。下面用两个具体例子详细说明:
例子1:长度不等的情况(m=3,n=2,s1=abc,s2=de)
这里s2是较短的字符串,我们通过左滑s2来完成所有比较配对:
- 初始状态:s1的头部对齐s2的尾部,比较s1[0]和s2[1],生成元组
(0,1) - 第一次左滑s2:此时s1[0]对齐s2[0]、s1[1]对齐s2[1],依次生成
(0,0)、(1,1) - 第二次左滑s2:此时s1[1]对齐s2[0]、s1[2]对齐s2[1],依次生成
(1,0)、(2,1) - 第三次左滑s2:此时s1[2]对齐s2[0],生成
(2,0)
最终按顺序输出的元组列表为:(0,1)、(0,0)、(1,1)、(1,0)、(2,1)、(2,0)
例子2:长度相等的情况(m=2,n=2)
当两个字符串长度相同时,同样遵循滑动逻辑(滑动任意一个字符串均可),最终生成的元组顺序为:(0,1)、(0,0)、(1,1)、(1,0)
总结规律
整个过程是从两个字符串尾部对齐的状态开始,逐步将短字符串向左滑动,每次滑动后,把所有重叠位置的字符索引配对成元组并按顺序收集,直到短字符串的头部对齐长字符串的头部(长度不等时)或完成所有可能的滑动配对(长度相等时)。
内容的提问来源于stack exchange,提问作者hedebyhedge
相关产品推荐
相关产品推荐

