Mirror characters of a string
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
paradox
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++ 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 code to find the reverse alphabetical
// order from a given position
import java.io.*;
class w3wiki {
// 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 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# 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.
<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 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:
Follow the below steps:
- 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:
#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;
}
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));
}
}
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))
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)
Contact Us