Lintcode 8 Rotate String__Lintcode

來源:互聯網
上載者:User
Rotate String Source lintcode: (8) Rotate String
Given a string and an offset, rotate string by offset. (rotate from left to right)ExampleGiven "abcdefg"for offset=0, return "abcdefg"for offset=1, return "gabcdef"for offset=2, return "fgabcde"for offset=3, return "efgabcd"...
題解

常見的翻轉法應用題,仔細觀察規律可知翻轉的分割點在從數組末尾數起的offset位置。先翻轉前半部分,隨後翻轉後半部分,最後整體翻轉。 Python

class Solution:    """    param A: A string    param offset: Rotate string with offset.    return: Rotated string.    """    def rotateString(self, A, offset):        if A is None or len(A) == 0:            return A        offset %= len(A)        before = A[:len(A) - offset]        after = A[len(A) - offset:]        # [::-1] means reverse in Python        A = before[::-1] + after[::-1]        A = A[::-1]        return A
C++
class Solution {public:  /**     * param A: A string     * param offset: Rotate string with offset.     * return: Rotated string.     */    string rotateString(string A, int offset) {        if (A.empty() || A.size() == 0) {            return A;        }        int len = A.size();        offset %= len;        reverse(A, 0, len - offset - 1);        reverse(A, len - offset, len - 1);        reverse(A, 0, len - 1);        return A;    }private:    void reverse(string &str, int start, int end) {        while (start < end) {            char temp = str[start];            str[start] = str[end];            str[end] = temp;            start++;            end--;        }    }};
Java
public class Solution {    /*     * param A: A string     * param offset: Rotate string with offset.     * return: Rotated string.     */    public char[] rotateString(char[] A, int offset) {        if (A == null || A.length == 0) {            return A;        }        int len = A.length;        offset %= len;        reverse(A, 0, len - offset - 1);        reverse(A, len - offset, len - 1);        reverse(A, 0, len - 1);        return A;    }    private void reverse(char[] str, int start, int end) {        while (start < end) {            char temp = str[start];            str[start] = str[end];            str[end] = temp;            start++;            end--;        }    }};
源碼分析 異常處理,A為空白或者其長度為0 offset可能超出A的大小,應模len後再用 三步翻轉法

Python 雖沒有提供字串的翻轉,但用 slice 非常容易實現,非常 Pythonic! 複雜度分析

翻轉一次時間複雜度近似為 O(n)O(n)O(n), 原地交換,空間複雜度為 O(1)O(1)O(1). 總共翻轉3次,總的時間複雜度為 O(n)O(n)O(n), 空間複雜度為 O(1)O(1)O(1).

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.