字母移位

字母移位

有一个由小写字母组成的字符串S,和一个整数数组shifts
我们将字母表中的下一个字母称为原字母的 移位(由于字母表是环绕的,z将会变成a)。
例如,shift('a') = 'b'shift('t') = 'u',以及shift('z') = 'a'
对于每个shifts[i] = x, 我们会将S中的前i+1个字母移位x次。
返回将所有这些移位都应用到S后最终得到的字符串。

示例#

Copy
输入:S = "abc", shifts = [3,5,9] 输出:"rpl" 解释: 我们以 "abc" 开始。 将 S 中的第 1 个字母移位 3 次后,我们得到 "dbc"。 再将 S 中的前 2 个字母移位 5 次后,我们得到 "igc"。 最后将 S 中的这 3 个字母移位 9 次后,我们得到答案 "rpl"

题解#

Copy
/** * @param {string} S * @param {number[]} shifts * @return {string} */ var shiftingLetters = function(S, shifts) { var sub = 0; var base = "a".charCodeAt(0); var target = ""; for(let i=S.length-1; i>=0; --i){ sub = (sub + shifts[i]); let charPath = (S[i].charCodeAt(0) - base + sub) % 26; target = String.fromCharCode(base + charPath) + target; } return target; };

思路#

这是字符的循环移位问题,根据shifts数组就可以计算出每个字符的移位数量,第i个字母共移位shifts[i] + shifts[i+1] + ... + shifts[shifts.length - 1]次,虽然可以直接是用数组计算出每个字符应该位移的长度,但是如果直接从数组尾部向前遍历,那么直接记录之前的累加值然后作循环移位即可,首先定义一个累加值计数和subJs中没有char基本数据类型,所以对于字符操作需要通过Ascii码计算,定义base作为字符aAscii码值,target为将要返回的目标字符串,然后从后向前遍历数组,累加sub计数器,计算当前字符加入计数器的长度减掉a字符来计算Ascii码值,然后取余获得对于a字符的偏移长度,然后将Ascii码值转换为字符拼接到目标字符串即可。

每日一题#

Copy
https://github.com/WindrunnerMax/EveryDay

题源#

Copy
https://leetcode-cn.com/problems/shifting-letters
posted @   WindRunnerMax  阅读(444)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
CONTENTS