剑指offer-和为S的两个数字-知识迁移能力-python

Posted ayew

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-和为S的两个数字-知识迁移能力-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

 

以上是关于剑指offer-和为S的两个数字-知识迁移能力-python的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer 40.知识迁移能力 数组中只出现一次的数字

[剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列

剑指offer 和为s的两个数字

剑指offer 42.和为S的两个数字

剑指OFFER 和为S的两个数字

剑指offer---和为S的两个数字