【LeetCode】848. Shifting Letters 解题报告(Python)

标签(空格分隔): LeetCode

作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.me/


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

题目描述:

We have 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’).

For example, shift(‘a’) = ‘b’, shift(‘t’) = ‘u’, and shift(‘z’) = ‘a’.

Now for 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

日期

2018 年 6 月 10 日 ———— 等了两天的腾讯比赛复赛B的数据集,结果人家在复赛刚开始就给了。。

最新文章

  1. Python-05-常用模块
  2. iOS 工程功能实现之好用的第三方
  3. 也来谈谈wap端瀑布流布局
  4. 计算机网络(1)-----网络层IP协议概述
  5. 三、Authentication &amp; sessionid
  6. C语言指针总结
  7. jquery 显示“加载状态 结束”
  8. JS原型和原型链
  9. 一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持组件注解限制(七)
  10. ueditor表格边框没有颜色的解决
  11. C#基础知识之面向对象以及面向对象的三大特性
  12. python3.5 opencv3显示视频fps
  13. Java——Struts2 crud 简单实例(学习struts2和ssh) 用Myeclipse实现
  14. day39Python
  15. HDU 1874(简单最短路) (大优化)
  16. Struts 2(八):文件上传
  17. bzoj1272 Gate Of Babylon(计数方法+Lucas定理+乘法逆元)
  18. libuv移植到android
  19. html锚点(mao dian)--特殊的超链接
  20. C Mingw gcc printf 刷新缓冲行

热门文章

  1. mysql 实现某年单季度内的品牌TOPn销量在此年此单季度内销量占比
  2. jmeter+ant输出测试报告
  3. Portrait Photography Beginners Guide
  4. 【leetcode】1293 .Shortest Path in a Grid with Obstacles
  5. tomcat结合nginx
  6. MyBatis(2):CRUD操作
  7. SpringBoot(2):运行原理
  8. Shell脚本实现自动修改IP地址
  9. [BUUCTF]REVERSE——[FlareOn4]login
  10. Table.AlternateRows删除间隔….Alternate…(Power Query 之 M 语言)