SLIDING WINDOW (2)

写代码时,若以句为单元进行思考则写起来费时且易出错,特别是边界条件上的错误。一个比较靠谱的方法是先写一个大致框架,然后将细节填入。只要框架合理,代码一般错不了。

先用注释勾勒出大致框架。(可以当作流程图看,重要的是那两个while内部的安排)

public String minWindow(String s, String t) { //创建HashMap1,将t中字符及出现次数存入 //初始化窗口、窗口的HashMap2、counter //创建minLength记录最小字符串的长度;创建result保存当前找到的最小字符串 while(/*窗口右端未超出s*/) { //记录右边界所指的元素到HashMap2 //若该元素次数满足条件,++counter //若窗口满足条件则让左边界慢慢收缩,否则跳过这个while,继续伸展右边界 while(/*counter == HashMap2.size()*/) { //若窗口长度小于minLength, 更新minLength、result //由于要收缩左边界,将HashMap2中记录的左边界元素减1 //如左边界元素次数不再满足条件,--counter l++; //收缩左边界 } r++; //伸展右边界 } return result; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjjfs.html