剑指offer-左旋转字符串-知识迁移能力-python

题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

方法一:python切片(python最好的一点就是什么都可以用下标访问,也有很多神级操作,比如这个,实现一行,但是感觉只适合笔试,面试这样写是要跪的)

# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        return s[n:]+s[:n]

 


方法二:三次翻转实现(面试如果碰到要讲这个~~)
s = ‘abcdefg’ n=2
1.把字符串从[0:n-1]翻转,s = ‘bacdefg’ 是前后交换位置翻转
2.把翻转一次的字符串再次翻转[n:len(s)-1],s = ‘bagfedc’
3.把翻转两次的字符串再次整体翻转[0:len(s)-1], s = ‘cdegfab’ over

class Solution:
    def reverse(self, s, l, r):
        while l < r:
            s[l], s[r] = s[r], s[l]
            l += 1
            r -= 1

    def LeftRotateString(self, s, n):
        if not s: return s
        s = list(s)  #str转成list处理
        self.reverse(s, 0, n - 1)
        self.reverse(s, n, len(s) - 1)
        self.reverse(s, 0, len(s) - 1)
        return ''.join(s)  #直接join列表就变成str了


原文链接:https://blog.csdn.net/weixin_38377054/article/details/82670883

 

posted @ 2019-12-20 10:14  ayew  阅读(200)  评论(0编辑  收藏  举报