lintcode :旋转字符串

题目:
旋转字符串

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

对于字符串 “abcdefg”.

offset=0 => “abcdefg”
offset=1 => “gabcdef”
offset=2 => “fgabcde”
offset=3 => “efgabcd”

挑战

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

方法一

    class Solution:
        """
        @param str: An array of char
        @param offset: An integer
        @return: nothing
        """
        def rotateString(self, s, offset):
            # write you code here
               # write you code here
            if len(s) != 0:
                print(offset)
                offset = offset % len(s)
                offset = len(s) - offset
                while offset  > 0:
                    tmp = s[0]
                    print(tmp)
                    for i in range(0,len(s) - 1):
                        s[i] = s[i + 1]
                    s[-1] = tmp
                    offset = offset -1

这种方法较慢,先把每个字符向右移动一个位置,然后重复多次,达到题目要求。

方法二

class Solution:
    # @param s: a list of char
    # @param offset: an integer 
    # @return: nothing
    def rotateString(self, s, offset):
        # write you code here
        if s!=None and len(s)!=0:
            left = 0
            right = len(s) - 1
            offset = offset%(right+1)
            self.rotateStr(s,0,right - offset)
            self.rotateStr(s,right - offset + 1,right)
            self.rotateStr(s,0,right)
        
        
    def rotateStr(self,s,left,right):
        while left<right:
            tmp = s[left]
            s[left] = s[right]
            s[right] = tmp
            left += 1
            right -= 1

如“a,b,c,d,e,f,g”向右平移两位,结果为—>“f,g,a,b,c,d,e”。
这种方法将一组数据分成两组。“a,b,c,d,e”, “f,g”
前部分倒序处理,“a,b,c,d,e”—>“e,d,c,b,a” ,
后部分倒序处理,“f,g”—>“g,f”
组合起来再整体倒序“e,d,c,b,a,g,f” —>“f,g,a,b,c,d,e”

参考:https://www.cnblogs.com/theskulls/p/4886379.html

猜你喜欢

转载自blog.csdn.net/qq_32371827/article/details/91046515
今日推荐