92 双指针解替换后的最长重复子串

发布时间:2024年01月02日

问题描述:给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可以替换k次,找到包含重复字母的最长子串的长度。

双指针滑动窗口求解:如果当前不重复的数字不超过k,则右移,若等于k则将长度与最长长度进行对比并更新,并使得left右移。

?

public? int?maxCharNum(char [] nums,int? start,int end)
{
int []charNumber=new int[26];
Arrays.fill(charNumber,0);
int max=Integer.MIN_VALUE;
for(int i=start;i<end;i++)
{
charNumber[nums[i]-'A']++;
}
int index=0;
for(int i=0;i<charNumber.length;i++)
{
if(charNumber[i]>max)
{
index=i;
max=Math.max(max,charNumber[i]);
}
}
return max;
}

public int maxLength(char?[]nums)
{
int index1=0;
int index2=0;
int maxcount=Integer.MIN_VALUE;
while(index2<nums.length)
{
if((index2-index1+1)-maxCharNum(nums,index1,index2)<k)
{
index2++;
}else if((index2-index1+1)-maxCharNum(nums,index1,index2)>k)
{
index1++;
}else
{
maxCount=Math.max(maxCount,index2-index1+1);
}
}
return maxCount;
}

文章来源:https://blog.csdn.net/qq_52299902/article/details/135347377
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。