编程珠玑-循环左移字符串

实现两种解法:

第一种为借助中间变量,

package leetcode;

public class ReverseString {
    /**
     * 
     * @param s
     * @param step
     * @return
     */
    public static char[] reverseString(String s, int step) {
        char[] reverse = s.toCharArray();
        char tmp = reverse[0];
        int i = 0;
        int start = 0;
        int firstPosition = start;
        int end = start + step;
        int len = reverse.length;
        while (i < len) {
            if (end == firstPosition) {
                reverse[start] = tmp;
                firstPosition = firstPosition + 1;
                start = firstPosition;
                tmp = reverse[start];
            } else {
                reverse[start] = reverse[end];
                start = end;
            }
            end = start + step;
            start = start % len;
            end = end % len;
            i++;
        }
        return reverse;

    }

    public static void main(String[] args) {
        System.out.println(reverseString("abcdfghggggggggggggggggggggggggggggg", 8));

    }

}

 

第二种利用求逆公式

package leetcode;

public class ReverseStringUseInverse {

    public static char[] reverseString(String s, int step) {
        char[] reverse = s.toCharArray();
        char tmp;
        int len = reverse.length;
        int rightLen = len - step;
        for (int i = 0; i < step / 2; i++) {
            tmp = reverse[i];
            reverse[i] = reverse[step - 1 - i];
            reverse[step - 1 - i] = tmp;
        }
        for (int i = 0; i < rightLen / 2; i++) {
            tmp = reverse[i + step];
            reverse[i + step] = reverse[len - i - 1];
            reverse[len - i - 1] = tmp;
        }
        for (int i = 0; i < len / 2; i++) {
            tmp = reverse[i];
            reverse[i] = reverse[len - i - 1];
            reverse[len - i - 1] = tmp;
        }
        return reverse;

    }

    public static void main(String[] args) {
        System.out.println(reverseString("abcdefgh", 5));
    }
}

 

posted @ 2015-12-30 14:09  程序猿进化之路  阅读(136)  评论(0)    收藏  举报