gpt4 book ai didi

848. Shifting Letters 字母移位

转载 作者:大佬之路 更新时间:2024-01-31 14:16:37 28 4
gpt4 key购买 nike

题目地址:https://leetcode.com/problems/shifting-letters/description/

题目描述:

Wehave a string S of lowercase letters, and an integer array shifts.

Call the shift of a letter, the next letter in the alphabet, (wrapping around so that 'z' becomes 'a').

Forexample, shift('a') = 'b', shift('t') = 'u', and shift('z') = 'a'.

Nowfor each shifts[i] = x, we want to shift the first i+1 letters of S, x times.

Return the final string after all such shifts to S are applied.

Example 1:

Input: S = "abc", shifts = [3,5,9]
Output: "rpl"
Explanation: 
We start with "abc".
After shifting the first 1 letters of S by 3, we have "dbc".
After shifting the first 2 letters of S by 5, we have "igc".
After shifting the first 3 letters of S by 9, we have "rpl", the answer.

Note:

1、 1<=S.length=shifts.length<=20000;
2、 0<=shifts[i]<=10^9;

题目大意

(这个题本身简单,但是读懂题目很重要)

给出了一个字符串S,以及和这个字符串等长的数组shifts。定义了一个shift操作:把某个字符在字母表上移动某位(字母'z'再向右移得到'a')。现在遍历shifts,每个操作都是把当前位数之前的所有字符移动shift位。求最后得到的字符串。

解题方法

坑还是挺明显的:需要把当前位数之前的所有字符串都去shift操作。看出题目给的字符串挺长的,如果普通的遍历,在每次遍历的时候再把之前所有shift过的再次shift,那么就会超时。

所以正确的做法是先求出每个字符串需要shift的次数。即对shifts进行位置之后的求和。得出要shift的位数之后,按照题目给的那种循环去操作就好了。

(应该没有人傻到真的去循环,而不是用求余操作吧233,逃……)

class Solution(object):
    def shiftingLetters(self, S, shifts):
        """
        :type S: str
        :type shifts: List[int]
        :rtype: str
        """
        _len = len(S)
        shifts_sum = sum(shifts)
        shifts_real = []
        for shift in shifts:
            shifts_real.append(shifts_sum)
            shifts_sum -= shift
        def shift_map(string, shift_time):
            shifted = ord(s) + (shift_time % 26)
            return chr(shifted if shifted <= ord('z') else shifted - 26)
        ans = ''
        for i, s in enumerate(S):
            ans += shift_map(s, shifts_real[i])
        return ans

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有

本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com