字符串旋转问题 求助。
最近看编程珠玑碰到字符串旋转问题
一个思路是
ab 变成 ba
步骤:
1. a1a2b (a1长度等于b)
2. ba2a1
3 递归地将a2a1换位置
于是我想上机实现。。。。冥思苦相 也没写出来递归的程序。。
完全没有任何思路。。
然后找到这个非递归代码:
- C/C++ code
void gcdrot(int rotdist, int n){ int i, j, p; if (rotdist == 0 || rotdist == n) return; i = p = rotdist; j = n - p; while (i != j) { /* invariant: x[0 ..p-i ] is in final position x[p-i..p-1 ] = a (to be swapped with b) x[p ..p+j-1] = b (to be swapped with a) x[p+j..n-1 ] in final position */ if (i > j) { swap(p-i, p, j); i -= j; } else { swap(p-i, p+j-i, i); j -= i; } } swap(p-i, p, i);}
看是看懂了。。
就是完全不知道这个是 怎么想出来的
求人给个 分析思路什么的
我想了好久了
还有谁能写出 那个递归的 给个思路也行
谢了!!!
上课去了
晚上回来看。
[解决办法]
三、hij | d | efg | abc // 好了,下面的就不说了,就是个递归调用的过程了。
[解决办法]
下面这个可以的
- C/C++ code
#include "stdio.h"char *swap_string(char *a,int n,int k){ int m = n/2; if(k < m) { char tmp; tmp=a[k]; a[k] = a[n-k-1]; a[n-k-1] = tmp; k++; swap_string(a,n,k); } return a;}int main(){ char p[] = "abcdefghijkl"; int n = sizeof(p)/sizeof(char); char *s; int k = 0; s = swap_string(p,n-1,k); printf("%s\n",s); return 0;}