剑指offer:Python 左旋转字符串 循环左移字符串

题目描述

汇编语言中有一种移位指令叫做循环左移(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))

在这里插入图片描述

发布了146 篇原创文章 · 获赞 37 · 访问量 7875

猜你喜欢

转载自blog.csdn.net/storyfull/article/details/103533332
今日推荐