凱撒密碼  


難度級別 容易獎學金
經常問 亞馬遜 GE醫療集團 雜貨店 UHG Optum
加密

產品介紹 - 點擊查看  

凱撒密碼技術是最早的加密技術之一。 在此,對於給定文本中的每個字母,將其替換為字母在字母下方固定位置的字母。 如果n = 1,則用B替換A,B將變為C,依此類推。

也就是說,S(x)=(x + n)mod26。

在這裡,a = 0,b = 1,……。 z = 25。

輸入格式  

第一行包含 “ s”。

第二行包含一個整數n,n代表每個字符的移位數。

輸出格式  

第一行和最後一行包含最後一個字符串“ t”。 此處,t [i] =(s [i] + n)/ 26。

約束  

  • 1 <= | s | <= 10 ^ 6
  • s [i]必須為小寫英文字母

例  

middleoutz
2
okffngqwvb

說明: 將每個字符旋轉2後,在給定的字符串“ middleoutz”中,字符的值變為:

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

因此,我們的最終字符串是“ okffngqwvb”。

凱撒密碼算法  

這裡的一串小寫字母是Text,0到25之間的整數是Shift。 要加密字符串,我們需要將字符串中的字母旋轉數字k。 如果k是26的倍數,則將字符串中的字母旋轉k對字符串沒有影響。 k旋轉與k + 26旋轉相同。 因此,通過將k取26為模,我們可以獲得旋轉字符串字母的次數。

也可以看看
包含通配符的字符串比較

1. 遍歷輸入字符串。

2. 一次取一個字符,每個字符按照規則進行轉換。

3. 返回最後的字符串。

履行  

凱撒密碼的C ++程序

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

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

凱撒密碼的複雜度分析  

時間複雜度

O(N) 哪裡 n 是給定字符串的大小。 在這裡,我們逐字符遍歷整個字符串char並在恆定時間內更改當前字符。

空間複雜度

O(1) 因為我們在這裡不使用任何輔助空間。 只需打印答案或更新給定的字符串即可。