剑指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