58-02 左旋转字符串

题目

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"。

牛客网 OJ
AcWing OJ

C 语言题解

以"abcdefg"为例,我们可以把它分为两部分。由于想把它的前两个字符移到后面,我们就把前两个字符分到第一部分,把后面的所有字符都分到第二部分。我们先分别翻转这两部分,于是就得到"bagfedc"。接下来我们再翻转整个字符串,得到的"cdefgab"刚好就是把原始字符串左旋转2位的结果。

char* leftRotateString(char* str, int n)
{
    // 检查输入的合法性
    if(str == NULL || n <= 0)
        return str;
    
    // 按照n的位置将字符串划分为两个部分
    char* pFirstStart = str;
    char* pFirstEnd = str + n - 1;
    
    char* pSecondStart = str + n;
    char* pSecondEnd = str;
    while(*pSecondEnd != '\0')
        pSecondEnd++;
    pSecondEnd --;

    // 翻转第一部分的字符串
    Reverse(pFirstStart, pFirstEnd);
    // 翻转第二部分的字符串
    Reverse(pSecondStart, pSecondEnd);
    // 翻转整个字符串
    Reverse(pFirstStart, pSecondEnd);

    return str;
    
}

void Reverse(char *pBegin, char *pEnd)
{
    if (pBegin == NULL || pEnd == NULL)
        return;

    while (pBegin < pEnd)
    {
        char temp = *pBegin;
        *pBegin = *pEnd;
        *pEnd = temp;

        pBegin++, pEnd--;
    }
}

C++ 题解

python题解

# -*- coding:utf-8 -*-
class Solution:
    def LeftRotateString(self, s, n):
        # write code here
        if s == None:
            return 
        
        if len(s) < n:
            return s
        
        return s[n:] + s[:n]
posted @ 2019-01-31 16:26  youngliu91  阅读(104)  评论(0)    收藏  举报