Skip to content
Related Articles

Related Articles

Improve Article

Reverse alternate k characters in a string

  • Difficulty Level : Easy
  • Last Updated : 03 Jun, 2021

Given a string str and an integer k, the task is to reverse alternate k characters of the given string. If characters present are less than k, leave them as it is.
Examples: 
 

Input: str = “geeksforgeeks”, k = 3 
Output: eegksfgroeeks
Input: str = “abcde”, k = 2 
Output: bacde 
 

 

Approach: The idea is to first reverse k characters, then jump onto the next k characters by adding 2 * k to the index and so on until the complete string is modified.
Below is the implementation of the above approach: 
 

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the string after
// reversing the alternate k characters
string revAlternateK(string s, int k, int len)
{
 
    for (int i = 0; i < s.size();) {
 
        // If there are less than k characters
        // starting from the current position
        if (i + k > len)
            break;
 
        // Reverse first k characters
        reverse(s.begin() + i, s.begin() + i + k);
 
        // Skip the next k characters
        i += 2 * k;
    }
    return s;
}
 
// Driver code
int main()
{
    string s = "geeksforgeeks";
    int len = s.length();
    int k = 3;
    cout << revAlternateK(s, k, len);
 
    return 0;
}

Java




// Java implementation of the approach
class GFG
{
 
// Function to return the string after
// reversing the alternate k characters
static String revAlternateK(String s,
                            int k, int len)
{
    for (int i = 0; i < s.length();)
    {
 
        // If there are less than k characters
        // starting from the current position
        if (i + k > len)
            break;
 
        // Reverse first k characters
        s = s.substring(0, i) + new String(new StringBuilder(
            s.substring(i, i + k)).reverse()) +
            s.substring(i + k);
 
        // Skip the next k characters
        i += 2 * k;
    }
    return s;
}
 
// Driver code
public static void main(String[] args)
{
    String s = "geeksforgeeks";
    int len = s.length();
    int k = 3;
    System.out.println(revAlternateK(s, k, len));
}
}
 
// This code is contributed by 29AjayKumar

Python3




# Python3 implementation of the approach
 
# Function to return the string after
# reversing the alternate k characters
def revAlternateK(s, k, Len):
    i = 0
     
    while(i < len(s)):
 
        # If there are less than k characters
        # starting from the current position
        if (i + k > Len):
            break
 
        # Reverse first k characters
        ss = s[i:i + k]
        s = s[:i]+ss[::-1]+s[i + k:]
         
        # Skip the next k characters
        i += 2 * k
     
    return s;
 
 
# Driver code
 
s = "geeksforgeeks"
Len = len(s)
k = 3
print(revAlternateK(s, k, Len))
 
# This code is contributed by mohit kumar

C#




// C# implementation of the approach
using System;
 
class GFG
{
 
// Function to return the string after
// reversing the alternate k characters
static String revAlternateK(String s,
                            int k, int len)
{
    for (int i = 0; i < s.Length;)
    {
 
        // If there are less than k characters
        // starting from the current position
        if (i + k > len)
            break;
     
        // Reverse first k characters
        s = s.Substring(0, i) +
            reverse(s.Substring(i, k).ToCharArray(), 0, k - 1) +
            s.Substring(i + k);
 
        // Skip the next k characters
        i += 2 * k;
    }
    return s;
}
static String reverse(char []str, int start, int end)
{
 
    // Temporary variable to store character
    char temp;
    while (start <= end)
    {
        // Swapping the first and last character
        temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
    return String.Join("", str);
}
 
// Driver code
public static void Main(String[] args)
{
    String s = "geeksforgeeks";
    int len = s.Length;
    int k = 3;
    Console.WriteLine(revAlternateK(s, k, len));
}
}
 
// This code contributed by Rajput-Ji

Javascript




<script>
// Javascript implementation of the approach
 
// Function to return the string after
// reversing the alternate k characters
function revAlternateK(s,k,len)
{
    for (let i = 0; i < s.length;)
    {
   
        // If there are less than k characters
        // starting from the current position
        if (i + k > len)
            break;
   
        // Reverse first k characters
        s = s.substring(0, i) + s.substring(i, i + k).split("").reverse().join("") +
            s.substring(i + k);
   
        // Skip the next k characters
        i += 2 * k;
    }
    return s;
}
 
// Driver code
let s = "geeksforgeeks";
let len = s.length;
let k = 3;
document.write(revAlternateK(s, k, len));
 
// This code is contributed by patel2127
</script>
Output: 
eegksfgroeeks

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :