LeetCode 1208. 尽可能使字符串相等
一、题目
二、思路
按照题目的意思,我们可以自己先模拟一下两个字符串对应的ASCII码差数组如下图
costs[i] = abs( s[i] - t[i] )
这样子一来,就可以把问题转换为找出costs数组中前缀和不超过maxCount的最长区间长度,而求区间长度问题,可以利用滑动窗口思想。
滑动窗口中用到了左右两个指针,它们移动的思路是:以右指针作为驱动,拖着左指针向前走。右指针每次只移动一步,而左指针在内部 while 循环中每次可能移动多步。右指针是主动前移,探索未知的新区域;左指针是被迫移动,负责寻找满足题意的区间。
三、代码实现(Java)
class Solution {
public int equalSubstring(String s, String t, int maxCost) {
int left = 0,right = 0; //滑动窗口的 left 和 right 指针
int len = s.length();
int cost = 0; //保存前缀和
int res = 0;
while(right < len) {
cost += Math.abs(s.charAt(right) - t.charAt(right));
while(cost > maxCost) { //前缀和超出阈值后,窗口左边界开始移动
cost -= Math.abs(s.charAt(left)-t.charAt(left));
left++;
}
right++;
res = Math.max(res,right-left);
}
return res;
}
}
坚持分享,坚持原创,喜欢博主的靓仔靓女们可以看看博主的首页博客!
您的点赞与收藏是我分享博客的最大赞赏!
博主博客地址: https://blog.csdn.net/weixin_43967679