汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出。例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “XYZdefabc” 。是不是很简单?OK,搞定它!
数据范围:输入的字符串长度满足
, 
进阶:空间复杂度
,时间复杂度 %5C)
"abcXYZdef",3
"XYZdefabc"
"aab",10
"aba"
# -*- coding:utf-8 -*- class Solution: def LeftRotateString(self, s, n): # write code here if n<0: return None a=s[:n] s=s+a return s[n:]
# -*- coding:utf-8 -*- class Solution: def LeftRotateString(self, s, n): # write code here if len(s) == 0: return '' else: n = n % len(s) return s[n:]+s[:n]
# -*- coding:utf-8 -*- class Solution: def LeftRotateString(self, s, n): # write code here return s[n%100:]+s[:n%100]
# -*- coding:utf-8 -*- class Solution: def LeftRotateString(self, s, n): if len(s)<=1: return s k=int(n%len(s)) ss='' for i in range(len(s)-k): ss=ss+s[i+k] for i in range(k): ss=ss+s[i] return ss # write code here
m=len(s)
if m==0:
return("")
else:
k=n%m
return(s[k:]+s[:k]) # -*- coding:utf-8 -*-
"""
two pointer
"""
class Solution:
def LeftRotateString(self, s, n):
if not s:
return ""
if n <= 0:
return s
s = list(s)
s_len = len(s)
if n < s_len:
# 整个翻转
self._reverse(s, 0, s_len - 1)
# 后半部份转回来
self._reverse(s, 0, s_len - n - 1)
# 前半部分赚回来
self._reverse(s, s_len - n, s_len - 1)
return "".join(s)
def _reverse(self, s, p1, p2):
while p1 < p2:
s[p1], s[p2] = s[p2], s[p1]
p1 += 1
p2 -= 1
s = Solution()
ans = s.LeftRotateString(" ", 3)
print(ans)