Description

Given a string and an offset, rotate string by offset. (rotate from left to right)

Example

Given"abcdefg".

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

Solution

三次翻转法:
以"abcdefg",offset=1为例,先将"abcde"和"fg"翻转得到"edcbagf",然后整体翻转即得到"gabcdef"

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;
        }

        int n = str.length;
        offset = offset % n;
        if (offset == 0) {
            return;
        }

        reverseString(str, 0, n - offset - 1);
        reverseString(str, n - offset, n - 1);
        reverseString(str, 0, n - 1);
    }

    private void reverseString(char[] str, int start, int end) {
        if (start < 0 || end >= str.length || start >= end) {
            return;
        }

        while (start < end) {
            char temp = str[start];
            str[start++] = str[end];
            str[end--] = temp;
        }
    }
}

results matching ""

    No results matching ""