Recursive program to insert a star between pair of identical characters

Given a string with repeated characters, we have to insert a star i.e.” * “ between pair of adjacent identical characters using recursion.

Examples:

Input : aabb 
Output : a*ab*b

Input : xxxy
Output : x*x*xy

Approach:



  • If there is an empty string then simply return. This forms our base condition.
  • Else we do the following-

  • Check if the first two characters are identical. If yes, then insert ” * ” between them.
  • As we have now checked for identical characters at first two positions of the string so we now make a recursive call without the first character of the string.

The above approach has been implemented below:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// Recursive CPP program to insert * between
// two consecutive same characters.
#include <iostream>
using namespace std;
  
// Function to insert * at desired position
void pairStar(string& input, string& output,
              int i = 0)
{
    // Append current character
    output = output + input[i];
  
    // If we reached last character
    if (i == input.length() - 1)
        return;
  
    // If next character is same, 
    // append '*'
    if (input[i] == input[i + 1]) 
        output = output + '*';       
  
    pairStar(input, output, i+1);
}
  
// Driver code
int main()
{
    string input = "geeks", output = "";
    pairStar(input, output);
    cout << output << endl;
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Recursive Java program to insert * between
// two consecutive same characters.
class GFG 
{
  
static String output="";
  
// Function to insert * at desired position
static void pairStar(String input,
            int i)
{
    // Append current character
    output = output + input.charAt(i);
  
    // If we reached last character
    if (i == input.length() - 1)
        return;
  
    // If next character is same, 
    // append '*'
    if (input.charAt(i) == input.charAt(i+1)) 
        output = output + '*';     
  
    pairStar(input, i+1);
}
  
// Driver code
public static void main(String[] args) 
{
    String input = "geeks";
    pairStar(input,0);
    System.out.println(output);
}
}
  
// This code is contributed by Princi Singh

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Recursive CPP program to insert * between 
# two consecutive same characters. 
  
# Function to insert * at desired position 
def pairStar(Input, Output, i = 0) :
      
    # Append current character 
    Output = Output + Input[i]
  
    # If we reached last character 
    if (i == len(Input) - 1) :
        print(Output)
        return
  
    # If next character is same, 
    # append '*' 
    if (Input[i] == Input[i + 1]) : 
        Output = Output + '*'
  
    pairStar(Input, Output, i + 1); 
  
# Driver code 
if __name__ == "__main__" :
  
    Input = "geeks"
    Output = ""
    pairStar(Input, Output); 
      
# This code is contributed by Ryuga

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// Recursive C# program to insert * between
// two consecutive same characters.
using System;
      
class GFG 
{
  
static String output="";
  
// Function to insert * at desired position
static void pairStar(String input,
            int i)
{
    // Append current character
    output = output + input[i];
  
    // If we reached last character
    if (i == input.Length - 1)
        return;
  
    // If next character is same, 
    // append '*'
    if (input[i] == input[i+1]) 
        output = output + '*';     
  
    pairStar(input, i+1);
}
  
// Driver code
public static void Main(String[] args) 
{
    String input = "geeks";
    pairStar(input,0);
    Console.WriteLine(output);
}
}
  
/* This code is contributed by PrinciRaj1992 */

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php 
  
// Recursive PHP program to insert * between
// two consecutive same characters.
  
// Function to insert * at desired position
function pairStar(&$input, &$output, $i = 0)
{
    // Append current character
    $output = $output . $input[$i];
  
    // If we reached last character
    if ($i == strlen($input) - 1)
        return;
  
    // If next character is same, 
    // append '*'
    if ($input[$i] == $input[$i + 1]) 
        $output = $output . '*';     
  
    pairStar($input, $output, $i+1);
}
  
    // Driver code
    $input = "geeks";
    $output = "";
    pairStar($input, $output);
    echo $output;
    return 0;
      
// This code is contributed by ChitraNayal
?>

chevron_right


Output:

ge*eks

Note:The recursive function in the above code is tail recursive as recursive call is the last thing executed by the function.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.