剑指offer之左旋转字符串
【摘要】 1 题目
字符串的左旋转操作是把字符串前面的若干字符转移到字符串尾部,比如字符串abcdef和数字2,函数返回左旋转得到的结果是cdefgab
2 思路
先反转字符串所有,通过数字n找到的边界 ,然后再反转字符串部分左边和部分右边。
&nbs...
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
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/98671136
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)