题目描述:
解题思路:
首先将两个字符串的差值存入数组,然后根据滑动窗口的思想,利用双指针解题,定义变量来储存left和right区间内的总和,因为窗口是一个只增大,不减小的,所以当总和小于等于maxcost的时候,就让right++窗口增大,反之,则让left++,同时因为窗口不可能变小,所以right也要++,同时更新总和,这样最后的窗口大小就是该题目的答案,可以在增大窗口的时候设置变量,也可以直接让length减去left的位置都正确。
这道题需要注意的地方是判断小于还是小于等于的地方容易搞错,需要理清逻辑
参考代码:
public int equalSubstring(String s, String t, int maxCost) {
char[] c1=s.toCharArray();
char[] c2=t.toCharArray();
int[] sum=new int[s.length()];
for (int i = 0; i < sum.length; i++) {
sum[i]=Math.abs(c1[i]-c2[i]);
}
int left=0,right=0;
int ans=0;
int res=0;
while (right< s.length()) {
ans+=sum[right];
if(ans<=maxCost)
{
right++;
res=Math.max(res,right-left);
}
else
{
ans-=sum[left];
left++;
right++;
}
}
return res;
}