left rotate string
我感觉这种不叫算法,叫一些小的tricks,就是换来换去,自己要理清楚,我想了一个基于交换的左旋算法,每次确定一个字符的最终位置,tmp记录下次
要确定位置的字符,i表示下一次要确定字符的当前的位置。
string LeftRotate(string str, int k)
{
int i,n=str.size();
if(k>=n || k<=0) return str;
char tmp=str[k];
int originalindex=k;
i=k;
for(int j=0;j<n;j++)
{
if(i>=k)
{
i=i-k;
}
else
{
i=n-k+i;
}
//originalindex=i;
swap(tmp,str[i]);
//tmp=str[i];
//tmp2=tmp;
//str[i]=tmp;
//originalindex=i;
}
return str;
}
另外今天又遇到了可怕的cin问题,尽管官方都说了cin>>是臭名昭著的,但是我还是不痛不痒的用了几年,到时候每次整数和字符串混输入的时候都得小心,一个换行符都会被cin留在缓冲区里。。。
而且看到July大大总结的那么多算法好像都还没有我这个算法。
另外最简单的就是两部分分别逆置,然后总的逆置,来自编程珠玑,怎么感觉还想还有一个问题也是这样的,有点乱了。。。
对好像是 对每个单词逆置,然后整个字符串逆置,明白了,这个其实是用来解决 把word顺序逆置,但是word里字符的顺序不变,那么当分成两个部分的时候(字符串左旋问题),利用这个算法刚好可以完成这个目标,所以可以说字符串左旋
右旋可以说是这个算法的一个特殊情况,原始算法是泛化。。。不过都是线性算法。
问题过于经典,关于July大神著名博客此题的解法,戳 http://blog.csdn.net/v_july_v/article/details/6322882