LeetCode 848. 字母移位

题目描述

848. 字母移位

思路分析

解法一:后缀累加(推荐)

核心思路

  • shifts[i] 影响前 i+1 个字符,等价于从后向前累加偏移量。
  • 维护后缀和 shift,每个字符按 shift % 26 旋转。
  • 使用字符数组原地修改。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示字符串长度。
  • 空间复杂度:O(n),用于字符数组。
class Solution {
    public String shiftingLetters(String s, int[] shifts) {
        char[] chars = s.toCharArray();
        long shift = 0;

        for (int i = chars.length - 1; i >= 0; i--) {
            shift = (shift + shifts[i]) % 26;
            int offset = chars[i] - 'a';
            chars[i] = (char) ('a' + (offset + shift) % 26);
        }

        return new String(chars);
    }
}
func shiftingLetters(s string, shifts []int) string {
	chars := []byte(s)
	shift := 0

	for i := len(chars) - 1; i >= 0; i-- {
		shift = (shift + shifts[i]) % 26
		chars[i] = byte('a' + (int(chars[i]-'a')+shift)%26)
	}

	return string(chars)
}

相似题目

题目 难度 考察点
1540. K 次操作转变字符串 中等 字符串
1260. 二维网格迁移 简单 模拟
821. 字符的最短距离 简单 字符串
1758. 生成交替二进制字符串的最少操作数 简单 字符串
1209. 删除字符串中的所有相邻重复项 II 中等
本文作者:
本文链接: https://hgnulb.github.io/blog/2022/62408884
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!