透過將每個字元向前移動其字母順序值來編碼給定的字串


在這個問題中,我們需要計算字元和 'a' 之間的距離,並透過將其新增到字元中,我們需要移動字元。

解決方案方法是找到兩個字元的 ASCII 值之間的差異,並將其新增到當前字元的 ASCII 值中。

問題陳述 - 我們給定了一個長度為 N 的字母字串,其中僅包含字母字元。我們需要根據以下條件對字串進行編碼。

  • 獲取當前字元和 'a' 之間的距離。

  • 按距離順時針方向移動字元。還要考慮迴圈移位。

示例

輸入

alpha = "abcd"

輸出

'aceg'

解釋

  • 'a' 和 'a' 之間的差值為 0。因此,我們需要進行 0 次移位。

  • 'a' 和 'b' 之間的差值為 1。因此,當我們將其移位 1 位時,我們得到 'c'。

  • 'a' 和 'c' 之間的距離為 2。因此,當我們將 'c' 移位 2 位時,我們得到 'e'。

  • 'a' 和 'd' 之間的距離為 3。因此,當我們將 'd' 移位 3 位時,我們得到 'g'。

輸入

alpha = "tutorialspoint";

輸出

'momciqawkecqam'

解釋 - 我們計算了每個字元的字元差並按差值移位。

輸入

alpha = "aaaa"

輸出

"aaaa"

解釋 - 'a' 和 'a' 之間的差值為 0。因此,輸出字串與輸入字串相同。

方法 1

此方法將獲取 'a' 和字元之間的差異。如果當前字元值和差異的總和大於或等於 26,我們將取總和的模數以執行迴圈移位。

演算法

步驟 1 - 使用 for 迴圈開始遍歷給定的字串。

步驟 2 - 在 'diff' 整數變數中,儲存 ch - 'a',這是字元和 'a' 之間的距離。

步驟 3 - 如果 2*diff 大於或等於 26,則取 2 * diff 與 26 的模數。

步驟 4 - 將 'diff' 新增到 'a' 並將其儲存到 'ch' 字元中。

步驟 5 - 如果 2*diff 小於 26,則將 diff 新增到 'ch' 中。

步驟 6 - 列印字母字串。

示例

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

void updateString(string alpha) {
   for (auto &ch : alpha) {
      int diff = ch - 'a';
      // If character + difference becomes greater than 'z'
      if (diff * 2 >= 26) {
         // Take modulus with 26
         diff = (diff * 2) % 26;
         // Add a difference
         ch = 'a' + diff;
      }
      // If 'z' is not exceeded
      else {
         // Add difference to the current character
         ch = ch + diff;
      }
   }
   cout << "The encoded string is - " << alpha << endl;
}
int main() {
   string alpha = "abcd";
   updateString(alpha);
   return 0;
}

輸出

The encoded string is - aceg

時間複雜度 - O(N),其中 N 是字串長度。

空間複雜度 - O(1),因為我們更新原始字串而不使用額外的空間。

我們學習瞭如何透過將距離新增到字元來執行字元的迴圈移位來編碼給定的字串。程式設計師可以編寫程式碼來解密編碼的字串,以獲得更多關於上述問題的練習。

更新於: 2023年8月24日

242 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.