阅读目录
题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
思路及Python实现
法一:利用切片来做,将前k个字符截取出来,放到剩下的字符后面
class Solution:
def LeftRotateString(self, s, n):
if s == "":
return s
if n == 0:
return s
k = n % len(s)
return s[k:] + s[:k]
obj = Solution()
print(obj.LeftRotateString("abcdefg", 3))
利用字符串的翻转,可以联系下全排的字典序法的实现
class Solution:
def reverse(self, s, start, end):
while start < end:
s[start], s[end] = s[end], s[start]
start += 1
end -= 1
def LeftRotateString(self, s, n):
if s == "":
return s
if n > len(s):
n %= len(s)
res = []
for i in range(len(s)):
res.append(s[i])
self.reverse(res, 0, n - 1)
self.reverse(res, n, len(s) - 1)
self.reverse(res, 0, len(s) - 1)
return "".join(res)
obj = Solution()
print(obj.LeftRotateString("abcdefg", 3))