Sanketandstrings

need help with this .unable to solve

@avinashmallik2017 This problem can be solved with help of two pointers. Let the first pointer is l and the second pointer is r. Then for every position l we will move right end r until on the substring si.si + 1… sr it is possible to make no more than k swaps to make this substring perfect. Then we need to update the answer with length of this substring and move l to the right.

please check this is my code

Hello @avinashmallik2017,

You can implement the following approach:
Perform following for both the characters a and b individually,

  1. Take two pointer l and r to mark the left and right index of the string under consideration.
  2. starting from l=0,r=0,max=0,count=0.
  3. repeat untill r <n (n is the length of string)
    3.1. increase the count whenever you find a different character(by different we mean if we are forming a string of a only, then b is different).
    3.2. while count is greater than k,
    3.2.1. decrement the count by one if element at lth index is different.
    3.2.1. increment l.
    3.3. Compare max with count for maximum value.
    3.4. increment r.

Let’s understand this with an example:
Example:
1
abba
Output:
3
Explanation:

l=0: variable to mark the left index and initialized to 0
r=0: variable to mark the right index and initialized to 0
m=0: to store the perfectness and initialised to zero
t=k: to keep track of the number of replacements we can perform at any instance of time.

  1. First, we will check for the string of character β€˜a’:

    character at a[r] is β€˜a’, increment r
    r:1
    the character at a[r] is not β€˜a’ and t>0, increment r and decrement t as we can replace one β€˜b’ to β€˜a’
    t:0 r:2
    the character at a[r] is not β€˜a’ and t==0. So, we cannot replace. Thus replace m by max. of m and r-l.
    Repeat, while t==0:
    A. if a[l]!=β€˜a’: increment t (because we must have done one replacement for this before and now as we are not considering this character so we can use this replacement somewhere else.)
    B. increment l for each iteration of the loop.
    m:2 t:0 l:1 t:1 l:2
    the character at a[r] is not β€˜a’ and t>0, increment r and decrement t as we can replace one β€˜b’ to β€˜a’
    t:0 r:3
    the character at a[r] is β€˜a’, increment r
    r:4
    replace m by max. of m and r-l.
    m:2

l=0: variable to mark the left index and initialized to 0
r=0: variable to mark the right index and initialized to 0
m=0: to store the perfectness and initialised to zero
t=k: to keep track of the number of replacements we can perform at any instance of time.

  1. Now, we will check for the string of character β€˜b’:

    the character at a[r] is not β€˜b’ and t>0, increment r and decrement t as we can replace one β€˜a’ to β€˜b’
    t:0 r:1
    character at a[r] is β€˜b’, increment r
    r:2
    character at a[r] is β€˜b’, increment r
    r:3
    the character at a[r] is not β€˜b’ and t==0. So, we cannot replace. Thus replace m by max. of m and r-l.
    Repeat, while t==0:
    A. if a[l]!=β€˜b’: increment t (because we must have done one replacement for this before and now as we are not considering this character so we can use this replacement somewhere else.)
    B. increment l for each iteration of the loop.
    m:3 t:1 l:1
    the character at a[r] is not β€˜b’ and t>0, increment r and decrement t as we can replace one β€˜a’ to β€˜b’
    t:0 r:4
    replace m by max. of m and r-l.
    m:3

Hence, the output is m:
3

Hope, this would help.
Give a like, if you are satisfied.