字母移位
时间:2022-07-24
本文章向大家介绍字母移位,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
字母移位
有一个由小写字母组成的字符串S
,和一个整数数组shifts
。
我们将字母表中的下一个字母称为原字母的 移位(由于字母表是环绕的,z
将会变成a
)。
例如,shift('a') = 'b'
,shift('t') = 'u'
,以及shift('z') = 'a'
。
对于每个shifts[i] = x
, 我们会将S
中的前i+1
个字母移位x
次。
返回将所有这些移位都应用到S
后最终得到的字符串。
示例
输入:S = "abc", shifts = [3,5,9]
输出:"rpl"
解释:
我们以 "abc" 开始。
将 S 中的第 1 个字母移位 3 次后,我们得到 "dbc"。
再将 S 中的前 2 个字母移位 5 次后,我们得到 "igc"。
最后将 S 中的这 3 个字母移位 9 次后,我们得到答案 "rpl"。
题解
/**
* @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]
次,虽然可以直接是用数组计算出每个字符应该位移的长度,但是如果直接从数组尾部向前遍历,那么直接记录之前的累加值然后作循环移位即可,首先定义一个累加值计数和sub
,Js
中没有char
基本数据类型,所以对于字符操作需要通过Ascii
码计算,定义base
作为字符a
的Ascii
码值,target
为将要返回的目标字符串,然后从后向前遍历数组,累加sub
计数器,计算当前字符加入计数器的长度减掉a
字符来计算Ascii
码值,然后取余获得对于a
字符的偏移长度,然后将Ascii
码值转换为字符拼接到目标字符串即可。
每日一题
https://github.com/WindrunnerMax/EveryDay
题源
https://leetcode-cn.com/problems/shifting-letters
- JAVA基础知识点:内存、比较和Final
- python django 学习(一)数据库 目的根据已有BBS建立新的网站步骤
- SpringMVC中@RequestMapping的基本用法
- Java面试系列13
- 【Go 语言 时间相关操作 demo】
- redis AOF保存机制
- 用 TensorFlow 让你的机器人唱首原创给你听
- 不用synchronized块的话如何实现一个原子的i++?
- Oracle升级中的参数补充(r9笔记第2天)
- 【Go 语言,服务器模块】日志系统源码
- wait方法和sleep方法的区别
- Java面试系列10
- python django整理(三)页面基础(仿BBS)
- 高并发场景下的httpClient优化使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法