写代码时,若以句为单元进行思考则写起来费时且易出错,特别是边界条件上的错误。一个比较靠谱的方法是先写一个大致框架,然后将细节填入。只要框架合理,代码一般错不了。
先用注释勾勒出大致框架。(可以当作流程图看,重要的是那两个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; }