当前位置:网站首页>424. The longest repeated character after replacement ●●
424. The longest repeated character after replacement ●●
2022-07-05 23:24:00 【chenyfan_】
424. The longest repeated character after replacement ●●
describe
Give you a string s And an integer k . You can select any character in the string , And change it to any other Capitalization English characters . This operation can be performed up to k Time .
After doing this , return The length of the longest substring containing the same letter .
Example
Input :s = “AABABBA”, k = 1
Output :4
explain :
Will the middle one ’A’ Replace with ’B’, The string changes to “AABBBBA”.
Substring “BBBB” There is the longest repeating letter , The answer for 4.
Answer key
1. Double pointer 1
Use a one-dimensional array to store the occurrence times of each letter in the window , Each time, the letters on the left border are used as fixed letters ( That is, replace different letters with this letter ), The right pointer moves to the right one by one , When it can no longer be replaced , Move the left pointer to the right , And update the current fixed letter ;
Be careful , Because this solution takes the left boundary letter as the fixed letter every time , So we also need to consider the length of the letter before the left boundary after it is replaced ,
such as s = “ACBBB”,k = 2; The correct result is 5; If you don't consider front , The result is 3.
class Solution {
public:
int characterReplacement(string s, int k) {
vector<int> cnts(26, 0);
int n = s.length(), ans = 0;
int l = 0, rest = k;
cnts[s[0]-'A'] = 1; // Initial left border
for(int r = 1; r < n; ++r){
if(s[r] != s[l]) --rest; // Replace operation ,--rest
++cnts[s[r]-'A']; // Statistics frequency
while(rest < 0){
// Replacement failed
--cnts[s[l]-'A'];
++l; // Move the left pointer
rest = k - ((r-l+1) - cnts[s[l]-'A'])); // Update the fixed letter to the left border letter ,(r-l+1)-cnts[s[l]-'A'] Indicates the number of letters to be replaced in the current window
}
int front = min(rest, l); // Consider replacing the previous letter
ans = max(ans, r-l+1+front); // Update Max
}
return ans;
}
};
2. Double pointer 2
Enumerate each position in the string as the right endpoint , Then find the location of its farthest left endpoint , Satisfy the interval except The type of characters that appear most often outside , The remaining characters ( That is, non longest repeating character ) No more than k individual .
So we can think of using double pointers to maintain these intervals , Every time the right pointer moves right , If the interval still satisfies the condition , So the left pointer doesn't move , Otherwise, the left pointer can be moved one space to the right at most , Guarantee The interval length does not decrease ( Remain unchanged or increase ).
Although such operation will cause some intervals not to meet the conditions , That is, after moving the left pointer , The non longest repeating character in this interval exceeds k individual (maxSame Changed but may not be updated ).
But such a range is also unlikely to contribute to the answer ( Until you move the right pointer to a letter that appears more frequently ). When we move the right pointer to the end , The length of the interval corresponding to the left and right pointers must correspond to the interval with the largest length .
Every time the interval moves right , We update the number of times the character shifted right appears , Then try to use it to update the historical maximum number of repeated characters , Finally, we use the maximum to calculate the number of non longest repeating characters in the interval , In order to judge whether the left pointer needs to move right .
class Solution {
public:
int characterReplacement(string s, int k) {
vector<int> cnts(26, 0);
int n = s.length();
int l = 0, r = 0, maxSame = 0;
for(; r < n; ++r){
++cnts[s[r]-'A'];
maxSame = max(maxSame, cnts[s[r]-'A']); // Maximum update frequency , Only when it occurs more frequently
if(k < (r-l+1) - maxSame){
// Replacement failed
--cnts[s[l]-'A']; // Move the left pointer , contract the window ( The maximum total length does not change at this time )
++l;
}
} // for In circulation r Take one more step , At the end r = n
return r-l; // The window size is guaranteed not to decrease , The maximum eligible window length
}
};
边栏推荐
- 【经典控制理论】自控实验总结
- 3D point cloud slam
- C Primer Plus Chapter 9 question 10 binary conversion
- Neural structured learning 4 antagonistic learning for image classification
- 媒体查询:引入资源
- Commonly used probability distributions: Bernoulli distribution, binomial distribution, polynomial distribution, Gaussian distribution, exponential distribution, Laplace distribution and Dirac delta d
- Media query: importing resources
- Non rigid / flexible point cloud ICP registration
- 派对的最大快乐值
- From the perspective of quantitative genetics, why do you get the bride price when you get married
猜你喜欢

Go语言实现原理——Map实现原理

Debian 10 installation configuration

Southeast Asia e-commerce guide, how do sellers layout the Southeast Asia market?

CIS基准测试工具kube-bench使用

3: Chapter 1: understanding JVM specification 2: JVM specification, introduction;

Technical specifications and model selection guidelines for TVs tubes and ESD tubes - recommended by jialichuang

Week 17 homework

Go language implementation principle -- lock implementation principle

Matlab smooth curve connection scatter diagram

Registration and skills of hoisting machinery command examination in 2022
随机推荐
Common static methods of math class
Openresty ngx Lua regular expression
Matlab smooth curve connection scatter diagram
Use the rewrite rule to rewrite all accesses to the a domain name to the B domain name
Shell: operator
YML configuration, binding and injection, verification, unit of bean
Golang code checking tool
2022 R2 mobile pressure vessel filling review simulation examination and R2 mobile pressure vessel filling examination questions
Basic knowledge of database (interview)
东南亚电商指南,卖家如何布局东南亚市场?
C# Linq Demo
CorelDRAW plug-in -- GMS plug-in development -- new project -- macro recording -- VBA editing -- debugging skills -- CDR plug-in (2)
LeetCode102. Sequence traversal of binary tree (output by layer and unified output)
TVS管和ESD管的技術指標和選型指南-嘉立創推薦
MySQL (2) -- simple query, conditional query
秒杀系统的设计与实现思路
asp.net弹出层实例
Realize reverse proxy client IP transparent transmission
Technical specifications and model selection guidelines for TVs tubes and ESD tubes - recommended by jialichuang
Composition of interface