C#实现字符串左旋转操作

竞赛题目及要求:

     定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。

     要求:对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。

思路:

     如需对一个字符串“abcdef”进行前2个字符左旋转操作,将字符串“abcdef”分成两部分,“ab”和“cdef”,分别对“ab”和“cdef”进行反转操作,“ab”-->"ba","cdef"-->"fedc",     之后合并组成一个“bafedc”的字符串,再将“bafedc”进行发转操作,“bafedc”-->"cdefab","cdefab"就是“abcdef”左旋转两位的结果。

代码实现:

     

 static void roll(StringBuilder strBuilder,int index,int n)
        {
			
            for (int i = 0; i < n/2; i++)
            {
                char temp = strBuilder[index+i];
                strBuilder[index+i] = strBuilder[index+n-i-1];
                strBuilder[index+n-i-1] = temp;
            }
            
        }

        /**
         * 对字符串str前index个数进行左旋转操作
         **/
        static void leftRotate(StringBuilder str,int index)
        {
            if (str.Length < index)
            {
                Console.WriteLine("所要旋转的字符串个数大于字符串总个数");
                return;
            }
            roll(str, 0, index);
            roll(str, index, str.Length - index);
            roll(str, 0, str.Length);

        }
        

  

posted @ 2012-09-30 00:17  指间人生  阅读(889)  评论(0编辑  收藏  举报
View Code