题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
题目地址
思路
思路1:利用字符串切片
思路2:多次翻转,先将0~n-1翻转,n~len(s)-1翻转,最后将整个字符串翻转
Python
# -*- coding:utf-8 -*- class Solution: def LeftRotateString(self, s, n): # write code here if len(s) <= 1: return s n = n % len(s) # 处理n>len(s)的情况 # 思路1 # return s[k:] + s[:k] # 思路2 # return (s[:n][::-1]+s[n:][::-1])[::-1] # 思路2 s = list(s) self.reverse(s,0,n-1) self.reverse(s,n,len(s)-1) self.reverse(s,0,len(s)-1) return "".join(s) def reverse(self, s,start,end): while start < end: s[start],s[end] = s[end],s[start] start += 1 end -= 1 if __name__ == '__main__': result = Solution().LeftRotateString('abcXYZdef',4) print(result)
作者:huangqiancun
出处:http://www.cnblogs.com/huangqiancun/
本博客若无特殊说明则由作者原创发布,欢迎转载,但请注明出处 :)