Mirror characters of a string

Last Updated : 06 May, 2024

Given a string and a number N, we need to mirror the characters from N-th position up to the length of the string in the alphabetical order. In mirror operation, we change ‘a’ to ‘z’, ‘b’ to ‘y’, and so on.

Examples:

Input : N = 3
Output : paizwlc
We mirror characters from position 3 to end.

Input : N = 6
pneumonia
Output : pnefnlmrz

Below are different characters and their mirrors.

[Tex]a b c d e f g h i j k l m || n o p q r s t u v w x y z   [/Tex]

Mirroring the alphabetical order means that a corresponds to z, b corresponds to y. Which means that first character becomes the last and so on. Now, to achieve this we maintain a string(or a character array) which contains the English alphabets in lower case. Now from the pivot point up to the length, we can look up the reverse alphabetical order of a character by using its ASCII value as an index. Using the above technique, we transform the given string in the required one.

Implementation:

C++ // C++ code to find the reverse alphabetical // order from a given position #include <iostream> #include <string> using namespace std; // Function which take the given string // and the position from which the reversing shall // be done and returns the modified string string compute(string str, int n) { // Creating a string having reversed alphabetical order string reverseAlphabet = "zyxwvutsrqponmlkjihgfedcba"; int l = str.length(); // The string up to the point specified in the question, // the string remains unchanged and from the point up to // the length of the string, we reverse the alphabetical // order for (int i = n; i < l; i++) str[i] = reverseAlphabet[str[i] - 'a']; return str; } // Driver function int main() { string str = "pneumonia"; int n = 4; string answer = compute(str, n - 1); cout << answer; return 0; }  Java // Java code to find the reverse alphabetical // order from a given position import java.io.*; class GeeksforGeeks { // Function which take the given string // and the position from which the reversing shall // be done and returns the modified string static String compute(String str, int n) { // Creating a string having reversed alphabetical order String reverseAlphabet = "zyxwvutsrqponmlkjihgfedcba"; int l = str.length(); // The string up to the point specified in the question, // the string remains unchanged and from the point up to // the length of the string, we reverse the alphabetical order String answer = ""; for (int i = 0; i < n; i++) answer = answer + str.charAt(i); for (int i = n; i < l; i++) answer = answer + reverseAlphabet.charAt(str.charAt(i) - 'a'); return answer; } // Driver function public static void main(String args[]) { String str = "pneumonia"; int n = 4; System.out.print(compute(str, n - 1)); } }  Python # python code to find the reverse # alphabetical order from a given # position # Function which take the given string and the # position from which the reversing shall be # done and returns the modified string def compute(st, n): # Creating a string having reversed # alphabetical order reverseAlphabet = "zyxwvutsrqponmlkjihgfedcba" l = len(st) # The string up to the point specified in the # question, the string remains unchanged and # from the point up to the length of the # string, we reverse the alphabetical order answer = "" for i in range(0, n): answer = answer + st[i]; for i in range(n, l): answer = (answer + reverseAlphabet[ord(st[i]) - ord('a')]); return answer; # Driver function st = "pneumonia" n = 4 answer = compute(st, n - 1) print(answer) # This code is contributed by Sam007.  C# // C# code to find the reverse alphabetical // order from a given position using System; class GFG { // Function which take the given string // and the position from which the // reversing shall be done and returns // the modified string static String compute(string str, int n) { // Creating a string having reversed // alphabetical order string reverseAlphabet = "zyxwvutsrqponmlkjihgfedcba"; int l = str.Length; // The string up to the point // specified in the question, // the string remains unchanged // and from the point up to // the length of the string, we // reverse the alphabetical order String answer = ""; for (int i = 0; i < n; i++) answer = answer + str[i]; for (int i = n; i < l; i++) answer = answer + reverseAlphabet[str[i]- 'a']; return answer; } // Driver function public static void Main() { string str = "pneumonia"; int n = 4; Console.Write(compute(str, n - 1)); } } // This code is contributed by Sam007.  Javascript <script> // Javascript code to find the reverse alphabetical // order from a given position // Function which take the given string // and the position from which the // reversing shall be done and returns // the modified string function compute(str, n) { // Creating a string having reversed // alphabetical order let reverseAlphabet = "zyxwvutsrqponmlkjihgfedcba"; let l = str.length; // The string up to the point // specified in the question, // the string remains unchanged // and from the point up to // the length of the string, we // reverse the alphabetical order let answer = ""; for (let i = 0; i < n; i++) answer = answer + str[i]; for (let i = n; i < l; i++) answer = answer + reverseAlphabet[str[i].charCodeAt()- 'a'.charCodeAt()]; return answer; } let str = "pneumonia"; let n = 4; document.write(compute(str, n - 1)); </script>  php <?php // php code to find the reverse alphabetical // order from a given position // Function which take the given string // and the position from which the reversing // shall be done and returns the modified // string function compute($str,$n) { // Creating a string having reversed // alphabetical order $reverseAlphabet = "zyxwvutsrqponmlkjihgfedcba";$l = strlen($str); // The string up to the point // specified in the question, // the string remains unchanged // and from the point up to // the length of the string, we // reverse the alphabetical order$answer = ""; for ($i = 0;$i < $n;$i++) $answer =$answer.$str[$i]; for ($i =$n; $i <$l; $i++){$answer = $answer.$reverseAlphabet[ ord($str[$i])- ord('a')]; } return $answer; } // Driver function$str = "pneumonia"; $n = 4;$answer = compute($str,$n - 1); echo \$answer; // This code is contributed by Sam007 ?> 

Output

pnefnlmrz

Time Complexity: O(n), where n represents the size of the given string.
Auxiliary Space: O(1), no extra space is required, so it is a constant.

Using Mapping:

• Firslty, mirror_characters() function takes a string and returns a number N.
• The first step is to map the characters to the mirrored characters using dictionary comprehension.
• The second step is to iterate over the characters in the string, starting from position N, and constructing the resulting string.
• The final step is to return the mirrored string.

Below is the implementation of the above approach:

C++ #include <iostream> #include <string> #include <unordered_map> std::string mirrorCharacters(const std::string& str, int N) { // Create a mapping of characters to their mirrored // counterparts std::unordered_map<char, char> mapping; for (int i = 97; i < 123; i++) { mapping[static_cast<char>(i)] = static_cast<char>(219 - i); } // Initialize the result string std::string result; // Iterate over the characters of the string for (size_t i = 0; i < str.length(); i++) { char currentChar = str[i]; if (i >= N - 1) { // Mirror the character if its position is equal // to or greater than N char mirroredChar = mapping.count(currentChar) ? mapping[currentChar] : currentChar; result += mirroredChar; } else { result += currentChar; } } return result; } int main() { int N = 3; std::string string1 = "paradox"; std::cout << mirrorCharacters(string1, N) << std::endl; return 0; }  Java import java.util.HashMap; import java.util.Map; public class MirrorCharacters { public static String mirrorCharacters(String string, int N) { // Create a mapping of characters to their mirrored // counterparts Map<Character, Character> mapping = new HashMap<>(); for (int i = 97; i < 123; i++) { mapping.put((char)i, (char)(219 - i)); } // Initialize the result string StringBuilder result = new StringBuilder(); // Iterate over the characters of the string for (int i = 0; i < string.length(); i++) { char currentChar = string.charAt(i); if (i >= N - 1) { // Mirror the character if its position is // equal to or greater than N char mirroredChar = mapping.getOrDefault( currentChar, currentChar); result.append(mirroredChar); } else { result.append(currentChar); } } return result.toString(); } public static void main(String[] args) { int N = 3; String string1 = "paradox"; System.out.println(mirrorCharacters(string1, N)); } }  Python def mirror_characters(string, N): # Create a mapping of characters to their mirrored counterparts mapping = {chr(i): chr(219 - i) for i in range(97, 123)} # Initialize the result string result = "" # Iterate over the characters of the string for i, char in enumerate(string): if i >= N - 1: # Mirror the character if its position is equal to or greater than N mirrored_char = mapping.get(char, char) result += mirrored_char else: result += char return result # Example usage: N = 3 string1 = "paradox" print(mirror_characters(string1, N))  JavaScript function mirrorCharacters(string, N) { // Create a mapping of characters to their mirrored counterparts const mapping = {}; for (let i = 97; i < 123; i++) { mapping[String.fromCharCode(i)] = String.fromCharCode(219 - i); } // Initialize the result string let result = ''; // Iterate over the characters of the string for (let i = 0; i < string.length; i++) { const currentChar = string.charAt(i); if (i >= N - 1) { // Mirror the character if its position is equal to or greater than N const mirroredChar = mapping[currentChar] || currentChar; result += mirroredChar; } else { result += currentChar; } } return result; } const N = 3; const string1 = 'paradox'; console.log(mirrorCharacters(string1, N)); // This code is contributed by shivamgupta0987654321 

Output

paizwlc

Time complexity: O(n), where n is the length of the input string.

Auxiliary Space: O(n)

Previous Article
Next Article
Article Tags :
Practice Tags :