Caesar Cipher


Difficulty Level Easy
Frequently asked in Amazon GE Healthcare Grofers UHG Optum
Cryptography String

Description

The Caesar Cipher technique is one of the earliest techniques of encryption. Here, for each letter in the given text, it is replaced by a letter some fixed number of positions down the alphabet. If n = 1, replace A with by B, B would become C, and so on.

That is, S(x) = (x + n)mod26.

Here, a = 0, b = 1, ……. z = 25.

Input Format

The first line containing a string “s”.

The second line containing an integer n which represents the number of shifts of each character.

Output Format

The first and only one line containing the final string “t”. Here t[i] = (s[i]+n)/26.

Constraints

  • 1<=|s|<=10^6
  • s[i] must be a lower case English alphabet

Example

middleoutz
2
okffngqwvb

Explanation: In the given string “middleoutz” after rotating every character by 2. The value of character becomes:

m -> o
i -> k
d -> f
d -> f
l -> n
e -> g
0 -> q
u -> w
t -> v
z -> b

So, our final string is “okffngqwvb”.

Algorithm for Caesar Cipher

Here a string of lower case letters is Text and an integer between– 0 – 25 is Shift. To encrypt the string, we need to rotate the alphabets in the string by a number k. If k is a multiple of 26, then rotating the alphabets in the string by k has no effect on the string. Rotation by k is the same as rotation by k+26. So by taking the modulo of k with 26, we get the number of times we need to rotate the alphabets of the string.

1. Traverse the input string.

2. Take one character at a time, for each character transform it as per the rules.

3. Return the final string.

Implementation

C++ Program for Caesar Cipher

#include <bits/stdc++.h>
using namespace std;

int main() 
{
    string s;
    cin>>s;
    int k;
    cin>>k;
    k%=26;
    for(int i=0;i<s.length();i++) 
    {
        int c=s[i];
        c+=k;
        if(c>'z') 
        {
           c=96+(c%122); 
        }
        s[i]=(char)c;
    }
    cout<<s<<endl;
    return 0;
}

Java Program for Caesar Cipher

import java.util.Scanner;

class sum
{
    public static void main(String[] args)
    {
        Scanner sr = new Scanner(System.in);
        String s = sr.next();
        int k = sr.nextInt();
        k=k%26;
        for(int i=0;i<s.length();i++) 
        { 
            int c=s.charAt(i); 
            c+=k; 
            if(c>'z') 
            {
                c=96+(c%122); 
            } 
            System.out.print((char)c); 
        }
        System.out.println();
    }
}




tutorialcup
12
fgfadumxogb

Complexity Analysis for Caesar Cipher

Time complexity

O(n) where n is the size of the given string. Here we traverse the whole string char by char and change the current character in constant time.

Space Complexity

O(1) because we don’t use any auxiliary space here. Simply print the answer or update the given string.