LeetCode 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 | 中等 | 栈 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!