Given string str consisting of lowercase letters only and an integer k, the task is to replace every character of the given string with a character whose ASCII value is k times more than it. If the ASCII value exceeds ‘z’, then start checking from ‘a in a cyclic manner.
Examples:
Input: str = “abc”, k = 2
Output: cde
Explanation:
a is moved by 2 times which results in character c
b is moved by 2 times which results in character d
c is moved by 2 times which results in character eInput: str = “abc”, k = 28
Output: cde
Explanation:
a is moved 25 times, z is reached. Then 26th character will be a, 27-th b and 28-th c.
b is moved 24 times, z is reached. 28-th is d.
b is moved 23 times, z is reached. 28-th is e.
Approach: Iterate for every character in the string and perform the below steps for each character:
- Add k to the ASCII value of character str[i].
- If it exceeds 122, then perform a modulus operation of k with 26 to reduce the number of steps, as 26 is the maximum number of shifts that can be performed in a rotation.
- To find the character, add k to 96. Hence, the character with ASCII value k+96 will be a new character.
Repeat the above steps for every character of the given string.
Below is the implementation of the above approach:
// CPP program to move every character // K times ahead in a given string #include <bits/stdc++.h> using namespace std;
// Function to move string character void encode(string s, int k){
// changed string
string newS;
// iterate for every characters
for ( int i=0; i<s.length(); ++i)
{
// ASCII value
int val = int (s[i]);
// store the duplicate
int dup = k;
// if k-th ahead character exceed 'z'
if (val + k > 122){
k -= (122-val);
k = k % 26;
newS += char (96 + k);
}
else
newS += char (val + k);
k = dup;
}
// print the new string
cout<<newS;
} // driver code int main(){
string str = "abc" ;
int k = 28;
// function call
encode(str, k);
return 0;
} // This code is contributed by Sanjit_Prasad |
// Java program to move every character // K times ahead in a given string class GFG {
// Function to move string character static void encode(String s, int k) {
// changed string
String newS = "" ;
// iterate for every characters
for ( int i = 0 ; i < s.length(); ++i) {
// ASCII value
int val = s.charAt(i);
// store the duplicate
int dup = k;
// if k-th ahead character exceed 'z'
if (val + k > 122 ) {
k -= ( 122 - val);
k = k % 26 ;
newS += ( char )( 96 + k);
} else {
newS += ( char )(val + k);
}
k = dup;
}
// print the new string
System.out.println(newS);
}
// Driver Code public static void main(String[] args) {
String str = "abc" ;
int k = 28 ;
// function call
encode(str, k);
}
} // This code is contributed by Rajput-JI |
# Python program to move every character # K times ahead in a given string # Function to move string character def encode(s, k):
# changed string
newS = ""
# iterate for every characters
for i in range ( len (s)):
# ASCII value
val = ord (s[i])
# store the duplicate
dup = k
# if k-th ahead character exceed 'z'
if val + k> 122 :
k - = ( 122 - val)
k = k % 26
newS + = chr ( 96 + k)
else :
newS + = chr (val + k)
k = dup
# print the new string
print (newS)
# driver code str = "abc"
k = 28
encode( str , k)
|
// C# program to move every character // K times ahead in a given string using System;
public class GFG {
// Function to move string character static void encode(String s, int k) {
// changed string
String newS = "" ;
// iterate for every characters
for ( int i = 0; i < s.Length; ++i) {
// ASCII value
int val = s[i];
// store the duplicate
int dup = k;
// if k-th ahead character exceed 'z'
if (val + k > 122) {
k -= (122 - val);
k = k % 26;
newS += ( char )(96 + k);
} else {
newS += ( char )(96 + k);
}
k = dup;
}
// print the new string
Console.Write(newS);
}
// Driver Code public static void Main() {
String str = "abc" ;
int k = 28;
// function call
encode(str, k);
}
} // This code is contributed by Rajput-JI |
<script> // Javascript program to move every character // K times ahead in a given string // Function to move string character function encode(s,k)
{
// changed string
let newS = "" ;
// iterate for every characters
for (let i = 0; i < s.length; ++i) {
// ASCII value
let val = s[i].charCodeAt(0);
// store the duplicate
let dup = k;
// if k-th ahead character exceed 'z'
if (val + k > 122) {
k -= (122 - val);
k = k % 26;
newS += String.fromCharCode(96 + k);
} else {
newS += String.fromCharCode(val + k);
}
k = dup;
}
// print the new string
document.write(newS);
}
// Driver Code
let str = "abc" ;
let k = 28;
// function call
encode(str, k);
// This code is contributed by rag2127 </script> |
<?php // PHP program to move every character // K times ahead in a given string // Function to move string character function encode( $s , $k )
{ // changed string
$newS = "" ;
// iterate for every characters
for ( $i = 0; $i < strlen ( $s ); ++ $i )
{
// ASCII value
$val = ord( $s [ $i ]);
// store the duplicate
$dup = $k ;
// if k-th ahead character exceed 'z'
if ( $val + $k > 122)
{
$k -= (122 - $val );
$k = $k % 26;
$newS = $newS . chr (96 + $k );
}
else
$newS = $newS . chr ( $val + $k );
$k = $dup ;
}
// print the new string
echo $newS ;
} // Driver code $str = "abc" ;
$k = 28;
// function call encode( $str , $k );
// This code is contributed by ita_c ?> |
cde
Complexity Analysis:
- Time Complexity: O(N), as we are using a loop to traverse N times so it will cost us O(N) time, where N is the length of the string.
- Auxiliary Space: O(N)
Approach: Using modular arithmetic
Steps:
- Convert the input string to a list of characters.
- Iterate over each character in the list.
- Calculate the new ASCII value by adding k to the ASCII value of the current character.
- If the new ASCII value exceeds the ASCII value of ‘z’, wrap around to ‘a’ by subtracting 26.
- Replace the current character in the list with the character corresponding to the new ASCII value.
- Convert the list of characters back to a string
- Return it as the result.
Below is the implementation of the above approach:
#include <iostream> #include <string> using namespace std;
// Function to replace characters in a string string replaceCharacters(string str, int k) {
// Iterate over each character in the string
for ( int i = 0; i < str.length(); ++i) {
int asciiVal = (str[i] - 'a' + k) % 26 + 'a' ; // Calculate the new ASCII value
str[i] = static_cast < char >(asciiVal); // Update the character
}
return str; // Return the modified string
} // Driver Code int main() {
string inputStr = "abc" ;
int kValue = 2;
string outputStr = replaceCharacters(inputStr, kValue);
cout << outputStr << endl;
return 0;
} |
public class GFG {
public static String replaceCharacters(String str, int k) {
// Convert the string to a character array
char [] charArray = str.toCharArray();
// Iterate over each character in the array
for ( int i = 0 ; i < charArray.length; ++i) {
int asciiVal = (charArray[i] - 'a' + k) % 26 + 'a' ;
charArray[i] = ( char ) asciiVal;
}
// Convert the character array back to a string
return new String(charArray);
}
public static void main(String[] args) {
String inputStr = "abc" ;
int kValue = 2 ;
String outputStr = replaceCharacters(inputStr, kValue);
System.out.println(outputStr);
}
} // This code is contributed by Samim Hossain Mondal. |
# Python program to move every character # K times ahead in a given string def replace_characters(string, k):
# Convert the string to a list of characters
char_list = list (string)
# Iterate over each character in the list
for i in range ( len (char_list)):
ascii_val = ( ord (char_list[i]) - ord ( 'a' ) + k) % 26 + ord ( 'a' )
char_list[i] = chr (ascii_val)
# Convert the list of characters back to a string
return "".join(char_list)
# Driver Code input_str = "abc"
k_value = 2
output_str = replace_characters(input_str, k_value)
print (output_str)
|
using System;
class Program {
// Function to replace characters in a string
static string ReplaceCharacters( string str, int k)
{
// Create a character array to store the modified
// characters
char [] modifiedChars = new char [str.Length];
// Iterate over each character in the string
for ( int i = 0; i < str.Length; ++i) {
int asciiVal
= (str[i] - 'a' + k) % 26
+ 'a' ; // Calculate the new ASCII value
modifiedChars[i]
= ( char )asciiVal; // Update the character in
// the array
}
// Create a new string from the modified character
// array
string modifiedStr = new string (modifiedChars);
return modifiedStr; // Return the modified string
}
// Driver Code
static void Main()
{
string inputStr = "abc" ;
int kValue = 2;
string outputStr
= ReplaceCharacters(inputStr, kValue);
Console.WriteLine(outputStr);
}
} |
// Function to replace characters in a string function replaceCharacters(str, k) {
// Iterate over each character in the string
for (let i = 0; i < str.length; i++) {
let charCode = str.charCodeAt(i);
let newCharCode = ((charCode - 'a' .charCodeAt(0) + k) % 26) + 'a' .charCodeAt(0); // Calculate the new character code
str = str.substring(0, i) + String.fromCharCode(newCharCode) + str.substring(i + 1); // Update the character
}
return str; // Return the modified string
} // Driver Code let inputStr = "abc" ;
let kValue = 2; let outputStr = replaceCharacters(inputStr, kValue); console.log(outputStr); // This code is contributed by shivamgupta0987654321 |
cde
Time Complexity: O(n), where n is the length of the input string.
Auxiliary Space: O(n)