当前位置: 首页 > article >正文

【LeetCode】2381、字母移位 II

【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+1
    for _, 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] += dir
        diff[end+1]-=dir // 同上
    }

    // 对差分数组, 求累加, 还原出原数组
    t := []byte(s)
    shift := 0 // s中下标为 i 的值, 累加为 shift
    for i := range t {
        shift += diff[i] // 位置i, 累加得到的偏移, 可正可负可零
        c := int(t[i]-'a') // 字符c对应的数字(值域0到26), 注意要强转为int
        gap := (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

http://www.kler.cn/a/440965.html

相关文章:

  • HTML DOM 对象
  • Python - Quantstats量化投资策略绩效统计包 - 详解
  • 团体程序设计天梯赛-练习集——L1-028 判断素数
  • 【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂
  • NLP深度学习 DAY5:Seq2Seq 模型详解
  • 【视频+图文详解】HTML基础3-html常用标签
  • Three.js相机Camera控件知识梳理
  • 压力测试Jmeter简介
  • Java全栈项目实战:校园论坛社交平台开发
  • Vue3实现双向绑定的基本原理和代码示例解析
  • HAL库与标准库的GPIO配置结构体对比
  • 免费下载 | 2024全球AI网络安全产品洞察报告
  • Python-基于Pygame的小游戏(贪吃蛇)(一)
  • Flink State面试题和参考答案-(下)
  • 数智读书笔记系列003 深度学习革命 从历史到未来
  • C++ ofstream:写操作
  • 如何在服务器上安装 Maven
  • busybox学习——简单介绍
  • 学习记录(13):VR晕动症-VR Motion Sickness
  • springcloud eureka原理和机制
  • 吉利百度发表联合声明:将积极协助极越处理相关事宜
  • HIK 相机 设置缓存节点进行取流
  • 模板方法模式详解:定义程序骨架与框架设计
  • MongoDB-副本集
  • Java函数式编程【三】【Stream终止操作】【上】之【简单约简】
  • 跑步训练(蓝桥杯2020试题A)