劍指offer之左旋轉(zhuǎn)字符串
1 題目
字符串的左旋轉(zhuǎn)操作是把字符串前面的若干字符轉(zhuǎn)移到字符串尾部,比如字符串a(chǎn)bcdef和數(shù)字2,函數(shù)返回左旋轉(zhuǎn)得到的結(jié)果是cdefgab
2 思路
先反轉(zhuǎn)字符串所有,通過數(shù)字n找到的邊界 ,然后再反轉(zhuǎn)字符串部分左邊和部分右邊。
3 代碼實現(xiàn)
#include <stdio.h>
/*
* 反轉(zhuǎn)整個字符串
*/
void reverse(char *begin, char *end)
{
if (NULL == begin || NULL == end)
return;
while (begin < end)
{
char temp = *end;
*end = *begin;
*begin = temp;
++begin;
--end;
}
}
/*
* 左旋轉(zhuǎn)字符串
* abcdefg
* gfedcba
* cdefgab
*/
char* leftReverse(char *str, int n)
{
if (str == NULL || n < 0)
{
return NULL;
}
//先反轉(zhuǎn)所有字符串
char *begin = str;
char *end = str;
int len = 0, count = n;
while (*end != '\0')
{
++end;
++len;
}
if (n > len)
{
return NULL;
}
end--;
reverse(begin, end);
begin = str;
//移動end到左右反轉(zhuǎn)分界地方
while (n > 0)
{
--n;
--end;
}
//反轉(zhuǎn)左邊一部分
reverse(begin, end);
//反轉(zhuǎn)右邊一部分
reverse(end + 1, end + count);
return str;
}
int main()
{
char b[] = "abcdefg";
char *result = NULL;
result = leftReverse(b, 2);
printf("%s\n", result);
return 0;
}
4 運行結(jié)果
cdefgab
作者:chen.yu
深信服三年半工作經(jīng)驗,目前就職游戲廠商,希望能和大家交流和學習,
微信公眾號:編程入門到禿頭 或掃描下面二維碼
零基礎入門進階人工智能(鏈接)