例:abcdefgh,循环右移K=3位,就成:fghabcde
思路:从上面的例子可以看出,结果就是将后面的K位与前面的N-K位调换位置即可。将字符串逆置,就使得前后位置发生了变化,但是前后两部分的字符顺序出现了逆置,所以在逆置整个字符串时,首先将两小部分分别逆置,最后在整体逆置。
1, abcdefgh ->abcde , fgh
2, edcba , hgf
3, fghabcde
//逆置字符串
void reverse(char* str,int left,int right)
{
while(left < right)
{
swap(str[left],str[right]);
left++;
right--;
}
}
void RightMove(char* str,int len,int k)
{
k = k%len;
reverse(str,0,len-k-1);
reverse(str,len-k,len-1);
reverse(str,0,len-1);
}
本文介绍了一种实现字符串循环右移的算法。该算法通过三次逆置操作来完成字符串的循环移位,先将字符串分为两部分进行逆置,再对整个字符串进行逆置,从而达到高效地实现字符串循环移位的目的。
1408

被折叠的 条评论
为什么被折叠?



