算法 简单 | 8. 旋转字符串

题目描述

给定一个字符串(以字符数组的形式给出)和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。

样例1

输入:  str="abcdefg", offset = 3
输出:  str = "efgabcd"	
样例解释:  注意是原地旋转,即str旋转后为"efgabcd"

样例2

输入: str="abcdefg", offset = 0
输出: str = "abcdefg"	
样例解释: 注意是原地旋转,即str旋转后为"abcdefg"

样例3

输入: str="abcdefg", offset = 1
输出: str = "gabcdef"	
样例解释: 注意是原地旋转,即str旋转后为"gabcdef"

样例4

输入: str="abcdefg", offset =2
输出: str = "fgabcde"	
样例解释: 注意是原地旋转,即str旋转后为"fgabcde"

样例5

输入: str="abcdefg", offset = 10
输出: str = "efgabcd"	
样例解释: 注意是原地旋转,即str旋转后为"efgabcd"

java题解

通过将原本的字符串倒置,可以将后面的旋转到前面。
但是结果两段分别倒置了,再分别将两段倒置回来即可。

public class Solution {
    /**
     * @param str: an array of char
     * @param offset: an integer
     * @return: nothing
     */
    public void rotateString(char[] str, int offset) {
        // write your code here
        if (str == null || str.length == 0)
            return;
            
        offset = offset % str.length;
        reverse(str, 0, str.length - offset - 1);
        reverse(str, str.length - offset, str.length - 1);
        reverse(str, 0, str.length - 1);
    }
    
    private void reverse(char[] str, int start, int end) {
        for (int i = start, j = end; i < j; i++, j--) {
            char temp = str[i];
            str[i] = str[j];
            str[j] = temp;
        }
    }
}

C++题解

class Solution {
public:
    /**
     * @param str: a string
     * @param offset: an integer
     * @return: nothing
     */
    void rotateString(string &str,int offset){
        //wirte your code here
        if (str.size() == 0)
            return;
            
        offset = offset % str.size();
        str = str.substr(str.size() - offset, offset) +
                str.substr(0, str.size() - offset);
    }
};

python题解

class Solution:
    # @param s: a list of char
    # @param offset: an integer 
    # @return: nothing
    def rotateString(self, s, offset):
        # write you code here
        if len(s) > 0:
            offset = offset % len(s)
            
        temp = (s + s)[len(s) - offset : 2 * len(s) - offset]

        for i in xrange(len(temp)):
            s[i] = temp[i]
发布了90 篇原创文章 · 获赞 16 · 访问量 1682

猜你喜欢

转载自blog.csdn.net/qq_43233085/article/details/103944651