One - One Code All

Blog Content

Lintcode-8:旋转字符串

Python 每日一练 算法 LintCode   2010-03-08 17:28:07

题目描述:

给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)

您在真实的面试中是否遇到过这个题?
Yes
样例
对于字符串 "abcdefg".

offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"

挑战
在数组上原地旋转,使用O(1)的额外空间

难点分析

特殊情况:①字符串为""的情况②offset=0的情况③offset远大于字符串长度的情况

前两种情况,如果想到了直接return就好。第三种情况难以想到,想到的话也好处理,因为如果偏移量offset为字符串长度的整数倍,那么偏移之后的结果其实就是源字符串,所以真正的偏移量应该为offset%(字符串的长度)。

# -*- coding: utf-8 -*-

'''
题目描述:

给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)

您在真实的面试中是否遇到过这个题? 
Yes
样例
对于字符串 "abcdefg".

offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"

挑战 
在数组上原地旋转,使用O(1)的额外空间

难点分析

特殊情况:①字符串为""的情况②offset=0的情况③offset远大于字符串长度的情况

前两种情况,如果想到了直接return就好。第三种情况难以想到,想到的话也好处理,因为如果偏移量offset为字符串长度的整数倍,那么偏移之后的结果其实就是源字符串,所以真正的偏移量应该为offset%(字符串的长度)。
'''

class Solution:
    # @param s: a list of char
    # @param offset: an integer
    # @return: nothing
    def rotateString(self, s, offset):
        # write you code here
        if not offset: return
        if not s: return
     
        n = len(s)
        offset = offset%n # offset可能大于N,取offset模n的余数
         
        f = n - offset
        return s[f:n]+s[0:f]

        '''
        # 如果传入是数组
        for i in range(offset):
            t = s.pop()
            s.insert(0,t) 
        '''


if __name__ == '__main__':
    str1 = 'abcdefg'
    sol = Solution()
    res = sol.rotateString(str1,1)
    print(res)

输入:gabcdef


上一篇:Lintcode-7:二叉树的序列化和反序列化
下一篇:Lintcode-9:Fizz Buzz 问题

The minute you think of giving up, think of the reason why you held on so long.