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

Posted by richard爱闹 - 7月 10 2014
如需转载,请注明: 本文来自 Richard