1208.尽可能使字符串相等
一道很简单的滑动窗口问题
思路是,先找到|s[i]-t[i]|<=cost的位置,定为初始的起点和终点,然后向后遍历,如果把新的塞进来,则终点位置加一,如果不能则窗口向后滑动,因为要找最大的,因此只考虑窗口扩大
class Solution {
public:
int equalSubstring(string s, string t, int maxCost) {
int n=s.size();
if(n==0)return 0;
int begin=0;int end=0;//窗口的起始和终点
int curren_cost=0;//当前窗口内的cost
int i;
for(i=0;i<n;++i){
if(abs(s[i]-t[i])<=maxCost){
begin=end=i;
curren_cost=abs(s[i]-t[i]);
break;
}
}
if(i==n)return 0;//未找到起点
for(i=begin+1;i<n;++i){
if(abs(s[i]-t[i])+curren_cost<=maxCost){//窗口能增大
end++;
curren_cost+=abs(s[i]-t[i]);
}
else{//如果窗口不能增大,也要更新current_cost(因为窗口在滑动)
curren_cost = curren_cost-abs(s[begin]-t[begin])+abs(s[i]-t[i]);
begin++;
end++;
}
}
return end-begin+1;
}
};