汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出。例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “XYZdefabc”
数据范围:输入的字符串长度满足
, ![](https://www.nowcoder.com/equation?tex=0%20%5Cle%20n%20%5Cle%20100%20%5C)
进阶:空间复杂度
,时间复杂度 ![](https://www.nowcoder.com/equation?tex=O(n)%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)