848. 字母移位

Leetcode 1220: Shifting Letters 问题解法分析

问题描述

给定一个由小写字母组成的字符串 s 和一个长度相同的整数数组 shifts,我们需要对字符串中的每个字符进行移位。每个 shifts[i] 表示将字符串 s 中前 i + 1 个字符按字母表中的移位次数进行变换。字母表是环绕的,‘z’ 会变成 ‘a’,‘a’ 会变成 ‘b’,等等。

具体来说,对于每个 shifts[i],我们需要将 s 中前 i + 1 个字母移位 shifts[i] 次。最终我们返回移位后的字符串。

示例 1:

输入:

s = "abc"
shifts = [3, 5, 9]

输出:

"rpl"

解释:

  • 对于第一个字符 'a',移位 3 次变为 'd'。
  • 对于第二个字符 'b',移位 5 次加上 3 次(从前一个字符移位结果的影响),共 8 次,'b' 变为 'j'。
  • 对于第三个字符 'c',移位 9 次加上 5 次,再加上 3 次,总共移位 17 次,'c' 变为 't'。

最终结果是 "rpl"。

### 字母移位加密算法简介 字母移位加密是一种经典的对称加密方法,也被称为凯撒密码。其基本原理是对明文中每一个字母按照固定的偏移量进行替换,从而形成密文。这种加密方式简单易懂,适合初学者学习。 在 Python 中实现字母移位加密时需要注意以下几点: - 偏移量通常为整数值,范围一般设定在 0 到 25 之间。 - 如果偏移量超出 26 的范围,可以通过取模运算 `offset % 26` 来简化计算[^4]。 - 加密过程仅针对英文字母进行操作,其他字符保持不变。 以下是基于上述原则的完整代码示例: ```python def caesar_encrypt(text, shift): result = "" for char in text: if 'A' <= char <= 'Z': # 处理大写字母 shifted_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A')) result += shifted_char elif 'a' <= char <= 'z': # 处理小写字母 shifted_char = chr((ord(char) - ord('a') + shift) % 26 + ord('a')) result += shifted_char else: # 非字母字符保持原样 result += char return result def caesar_decrypt(cipher_text, shift): return caesar_encrypt(cipher_text, -shift) # 示例 plain_text = "Hello World! ABC" shift_amount = 3 encrypted_text = caesar_encrypt(plain_text, shift_amount) decrypted_text = caesar_decrypt(encrypted_text, shift_amount) print("原始文本:", plain_text) print("加密后的文本:", encrypted_text) print("解密后的文本:", decrypted_text) ``` ### 输出结果解释 通过运行以上代码,可以看到如下输出效果: - **原始文本**: Hello World! ABC - **加密后的文本**: Khoor Zruog! DEF - **解密后的文本**: Hello World! ABC 此代码实现了完整的加解密功能,并能够保留非字母字符不被改变。 --- ### 注意事项 1. 上述代码仅适用于英文字符的加密与解密。如果需要支持多语言环境下的字符集,则需扩展逻辑以兼容 Unicode 编码[^1]。 2. 凯撒密码的安全性较低,在实际应用中建议采用更先进的加密技术,例如 AES 或 RSA 等现代加密算法[^2]。 --- ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值