Dada una string str y un entero positivo N , la tarea es invertir N caracteres y saltar N caracteres hasta el final de la string para generar el mensaje cifrado.
Ejemplos:
Entrada: str = “ihTs suohld ebeas!y”, K = 3
Salida: ¡Esto debería ser fácil!
Explicación:
Invertir “ihT” -> “Thi”
“s” sigue siendo el mismo
“uoh” -> “hou”, y así sucesivamente.Entrada: str = “!ysae eb dluohs sihT”, K = 30
Salida: ¡Esto debería ser fácil!
Explicación:
dado que 30 es más grande que la longitud de la string dada (= 20), simplemente imprima el reverso de la string.
Enfoque: siga los pasos a continuación para resolver el problema:
- Recorre la string dada.
- Incremente el iterador en 2 * N .
- Invierte N caracteres paso a paso.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ Program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to decrypt and print the // original strings int decryptString(string s, unsigned int N) { for (unsigned int i = 0; i < s.size(); i += 2 * N) { auto end = s.begin() + i + N; // If length is exceeded if (i + N > s.size()) end = s.end(); // Reverse the string reverse(s.begin() + i, end); } cout << s << endl; } // Driver Code int main() { string s = "ihTs suohld ebeas!y"; unsigned int N = 3; decryptString(s, N); return 0; }
Python3
# Python3 program to implement # the above approach # Function to decrypt and print the # original strings def decryptString(s, N): for i in range(0, len(s), 2 * N): if (i + N < len(s)): end = s[i + N] # If length is exceeded if (i + N > len(s)): end = s[-1] # Reverse the string if (i == 0): s = s[i + N - 1::-1] + s[i + N:] else: s = s[:i] + s[i + N - 1:i - 1:-1] + s[i + N:] print(s) # Driver Code if __name__ == "__main__": s = "ihTs suohld ebeas!y" N = 3 decryptString(s, N) # This code is contributed by ukasp
Producción:
This should be easy!
Complejidad temporal: O(N)
Espacio auxiliar: O(1)