剑指offer之左旋转字符串
生活随笔
收集整理的這篇文章主要介紹了
剑指offer之左旋转字符串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 題目
字符串的左旋轉操作是把字符串前面的若干字符轉移到字符串尾部,比如字符串abcdef和數字2,函數返回左旋轉得到的結果是cdefgab
?
?
?
?
?
?
?
2 思路
先反轉字符串所有,通過數字n找到的邊界 ,然后再反轉字符串部分左邊和部分右邊。
?
?
?
?
?
?
?
3 代碼實現
#include <stdio.h>/** 反轉整個字符串*/ void reverse(char *begin, char *end) {if (NULL == begin || NULL == end)return;while (begin < end){char temp = *end;*end = *begin;*begin = temp;++begin;--end;} }/** 左旋轉字符串* abcdefg* gfedcba* cdefgab*/ char* leftReverse(char *str, int n) {if (str == NULL || n < 0){return NULL;}//先反轉所有字符串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到左右反轉分界地方while (n > 0){--n;--end;}//反轉左邊一部分reverse(begin, end);//反轉右邊一部分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 運行結果
cdefgab?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的剑指offer之左旋转字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer之求两个数之和(不能使用四
- 下一篇: 剑指offer之和为s的数组