文章目錄
- 1. 題目
- 2. 解題
1. 題目
有一個由小寫字母組成的字串 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",
提示:
1 <= S.length = shifts.length <= 20000
0 <= shifts[i] <= 10 ^ 9
來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/shifting-letters
著作權歸領扣網路所有,商業轉載請聯系官方授權,非商業轉載請注明出處,
2. 解題
class Solution { //C++
public:
string shiftingLetters(string S, vector<int>& shifts) {
int i, n = S.size();
for(i = n-2; i >= 0; i--)
//前面的需要移動多次,逆序前綴和
{
shifts[i] = (shifts[i] + shifts[i+1])%26;//避免溢位
}
for(i = 0; i < n; i++)
{
S[i] = (S[i]-'a'+(shifts[i]%26))%26 + 'a';
}
return S;
}
};
68 ms 18.8 MB
class Solution: # py3
def shiftingLetters(self, S: str, shifts: List[int]) -> str:
n = len(S)
for i in range(n-2, -1, -1):
# 前面的需要移動多次,逆序前綴和
shifts[i] = (shifts[i] + shifts[i+1])%26
ans = list(S)
for i in range(n):
ans[i] = chr((ord(ans[i])-ord('a')+shifts[i])%26 + ord('a'))
return "".join(ans)
224 ms 15.5 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/77142.html
標籤:其他
上一篇:年紀輕輕就失去最親的人
