本文共 501 字,大约阅读时间需要 1 分钟。
今天在看到一道算法面试题,字符串的循环左移,就是给你一个字符串,要求循环左移n个字符
如:1234 2 ---》3412
想了半天,没什么好的方法,暴力循环O(n*len) 的复杂度,到网上查了一下,发现有O(len)的复杂度
解法如下:如上例
先对0~n-1进行反转 21
再对n~len-1进行反转 43
得到了 2143
再对2143进行反转得到最终结果 3412
代码如下:
void Reverse(char *str, int st, int ed){//字符串反转 while(st < ed){ char tmp = str[st]; str[st++] = str[ed]; str[ed--] = tmp; }}//n表示循环左移的位数void LeftRotateString(char *str, int n){ int len = strlen(str); Reverse(str, 0, n-1); Reverse(str, n, len-1); Reverse(str, 0, len-1);}
转载地址:http://rjsgi.baihongyu.com/