当前位置: 首页> 科技> 数码 > 中山疫情最新情况_山东青岛最新消息_南平seo_seo是什么职业做什么的

中山疫情最新情况_山东青岛最新消息_南平seo_seo是什么职业做什么的

时间:2025/7/11 15:31:55来源:https://blog.csdn.net/jiaoyangwm/article/details/144485054 浏览次数:0次
中山疫情最新情况_山东青岛最新消息_南平seo_seo是什么职业做什么的

【LeetCode】2381、字母移位 II

文章目录

  • 一、数据结构-差分-一维差分
    • 1.1 数据结构-差分-一维差分
  • 二、多语言解法

一、数据结构-差分-一维差分

1.1 数据结构-差分-一维差分

题目复述: 字符串s, 和shifts[]数组, 遍历每个shifts[i]来操作s, 操作如下:
每个shifts[i] 为 [starti, endi, directioni] 的三元组
把 s 中下标为 [starti, endi] 左比右闭区间的字母, 向前或向后偏移一个字符.
其中 若 directioni == 0 则向前偏移, 若 directioni == 1 则向后偏移

子区间的整体改变, 可联想到差分, 即差分数组两端的改变.

// go
func shiftingLetters(s string, shifts [][]int) string {n := len(s)diff := make([]int, n+1) // 差分数组, 注意大小为n+1for _, p := range shifts {start, end, dir := p[0], p[1], 2*p[2]-1 // 2*direction-1 使值域 [0,1] 变为 [-1,1]diff[start]+=dir // 意为 s[start...end] += dirdiff[end+1]-=dir // 同上}// 对差分数组, 求累加, 还原出原数组t := []byte(s)shift := 0 // s中下标为 i 的值, 累加为 shiftfor i := range t {shift += diff[i] // 位置i, 累加得到的偏移, 可正可负可零c := int(t[i]-'a') // 字符c对应的数字(值域0到26), 注意要强转为intgap := (c + shift%26 + 26) % 26 // 位置i, 最终字符, 的非负数数字表示. +26是为了使余数为非负数. shift%26是为了防止数字太大而溢出t[i] = byte('a' + gap) // 注意要强转为byte}return string(t)
}

灵神视频
灵神题解

二、多语言解法

C p p / G o / P y t h o n / R u s t / J s / T s Cpp/Go/Python/Rust/Js/Ts Cpp/Go/Python/Rust/Js/Ts

// cpp
// go 同上
# python
// rust
// js
// ts
关键字:中山疫情最新情况_山东青岛最新消息_南平seo_seo是什么职业做什么的

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: