Open In App

Substring Reverse Pattern

Improve
Improve
Like Article
Like
Save
Share
Report

Given string str, the task is to print the pattern given in the examples below:

Examples:  

Input: str = “geeks” 
Output: 
geeks 
*kee* 
**e** 
The reverse of “geeks” is “skeeg” 
Replace the first and last characters with ‘*’ i.e. *kee* 
Replace the second and second last character in the modified string i.e. **e** 
And so on.

Input: str = “first” 
Output: 
first 
*sri* 
**r** 

Approach: 

  • Print the unmodified string.
  • Reverse the string and initialize i = 0 and j = n – 1.
  • Replace s[i] = ‘*’ and s[j] = ‘*’ and update i = i + 1 and j = j – 1 then print the modified string.
  • Repeat the above steps while j – i > 1.

Below is the implementation of the above approach: 

C++




// C++ program to print the required pattern
#include <bits/stdc++.h>
using namespace std;
 
// Function to print the required pattern
void printPattern(char s[], int n)
{
 
    // Print the unmodified string
    cout << s << "\n";
 
    // Reverse the string
    int i = 0, j = n - 2;
    while (i < j) {
        char c = s[i];
        s[i] = s[j];
        s[j] = c;
        i++;
        j--;
    }
 
    // Replace the first and last character by '*' then
    // second and second last character and so on
    // until the string has characters remaining
    i = 0;
    j = n - 2;
    while (j - i > 1) {
        s[i] = s[j] = '*';
        cout << s << "\n";
        i++;
        j--;
    }
}
 
// Driver code
int main()
{
    char s[] = "geeks";
    int n = sizeof(s) / sizeof(s[0]);
 
    printPattern(s, n);
    return 0;
}


Java




// Java program to print the required pattern
class GFG
{
     
// Function to print the required pattern
static void printPattern(char[] s, int n)
{
    // Print the unmodified string
    System.out.println(s);
 
    // Reverse the string
    int i = 0, j = n - 1;
    while (i < j)
    {
        char c = s[i];
        s[i] = s[j];
        s[j] = c;
        i++;
        j--;
    }
 
    // Replace the first and last character
    // by '*' then second and second last
    // character and so on until the string
    // has characters remaining
    i = 0;
    j = n - 1;
    while (j - i > 1)
    {
        s[i] = s[j] = '*';
        System.out.println(s);
        i++;
        j--;
    }
}
 
// Driver Code
public static void main(String []args)
{
    char[] s = "geeks".toCharArray();
    int n = s.length;
 
    printPattern(s, n);
}
}
 
// This code is contributed by Rituraj Jain


Python3




# Python3 program to print the required pattern
 
# Function to print the required pattern
def printPattern(s, n):
 
    # Print the unmodified string
    print(''.join(s))
 
    # Reverse the string
    i, j = 0, n - 1
     
    while i < j:
        s[i], s[j] = s[j], s[i]
        i += 1
        j -= 1
     
    # Replace the first and last character
    # by '*' then second and second last
    # character and so on until the string
    # has characters remaining
    i, j = 0, n - 1
     
    while j - i > 1:
        s[i], s[j] = '*', '*'
        print(''.join(s))
        i += 1
        j -= 1
 
# Driver code
if __name__ == "__main__":
 
    s = "geeks"
    n = len(s)
 
    printPattern(list(s), n)
     
# This code is contributed
# by Rituraj Jain


C#




// C# program to print the required pattern
using System;
 
class GFG
{
     
// Function to print the required pattern
static void printPattern(char[] s, int n)
{
    // Print the unmodified string
    Console.WriteLine(s);
 
    // Reverse the string
    int i = 0, j = n - 1;
    while (i < j)
    {
        char c = s[i];
        s[i] = s[j];
        s[j] = c;
        i++;
        j--;
    }
 
    // Replace the first and last character
    // by '*' then second and second last
    // character and so on until the string
    // has characters remaining
    i = 0;
    j = n - 1;
    while (j - i > 1)
    {
        s[i] = s[j] = '*';
        Console.WriteLine(s);
        i++;
        j--;
    }
}
 
// Driver Code
public static void Main(String []args)
{
    char[] s = "geeks".ToCharArray();
    int n = s.Length;
 
    printPattern(s, n);
}
}
 
// This code is contributed by 29AjayKumar


Javascript




<script>
 
// Javascript program to print the required pattern
 
// Function to print the required pattern
function printPattern(s, n)
{
 
    // Print the unmodified string
    document.write( s.join('') + "<br>");
 
    // Reverse the string
    var i = 0, j = n - 1;
    while (i < j) {
        var c = s[i];
        s[i] = s[j];
        s[j] = c;
        i++;
        j--;
    }
 
    // Replace the first and last character by '*' then
    // second and second last character and so on
    // until the string has characters remaining
    i = 0;
    j = n - 1;
    while (j - i > 1) {
        s[i] = s[j] = '*';
        document.write( s.join('') + "<br>");
        i++;
        j--;
    }
}
 
// Driver code
var s = "geeks".split('');
var n = s.length;
printPattern(s, n);
 
 
</script>


Output

geeks
*kee*
**e**

Complexity Analysis:

  • Time Complexity: O(N) since one traversal of the string is required to complete all operations hence the overall time required by the algorithm is linear
  • Auxiliary Space: O(1) since no extra array is used so the space taken by the algorithm is constant


Last Updated : 12 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads