Reemplace cada carácter de string por carácter cuyo valor ASCII sea K veces mayor que él

Dada la string str que consiste solo en letras minúsculas y un número entero k , la tarea es reemplazar cada carácter de la string dada con un carácter cuyo valor ASCII sea k veces mayor que él. Si el valor ASCII excede ‘z’, comience a verificar desde ‘a’ de manera cíclica.

Ejemplos:  

Entrada: str = “abc”, k = 2 
Salida: el código 
a se mueve 2 veces, lo que da como resultado el carácter c 
b se mueve 2 veces, lo que da como resultado el carácter d 
c se mueve 2 veces, lo que da como resultado el carácter e
Entrada: str = “abc”, k = 28 
Salida : el código 
a se mueve 25 veces, se alcanza z. Entonces el 26º carácter será a, el 27º b y el 28º c. 
b se mueve 24 veces, se alcanza z. 28-th es d. 
b se mueve 23 veces, se alcanza z. 28-th es e. 

Enfoque : iterar para cada carácter de la string y realizar los siguientes pasos para cada carácter:  

  • Agregue k al valor ASCII del carácter str[i].
  • Si excede 122, entonces realice una operación de módulo de k con 26 para reducir el número de pasos, ya que 26 es el número máximo de cambios que se pueden realizar en una rotación.
  • Para encontrar el carácter, agregue k a 96. Por lo tanto, el carácter con valor ASCII k+96 será un carácter nuevo.

Repita los pasos anteriores para cada carácter de la string dada.

A continuación se muestra la implementación del enfoque anterior: 

C++

// 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

// 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

Python3

# 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#

// 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

PHP

<?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
?>

Javascript

<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>

Producción:  

code

Complejidad de tiempo: O (N), ya que estamos usando un bucle para atravesar N veces, por lo que nos costará O (N) tiempo, donde N es la longitud de la string.
Espacio Auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por indrajit1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *