zoukankan      html  css  js  c++  java
  • 微软之左旋转字符串

    时间:2014.04.29

    地点:基地二楼

    ----------------------------------------------------------------------------------------------

    一、题目

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

    -------------------------------------------------------------

    二、思路

    如果有 abcdef12345,我们想将abcdef放置12345通过左旋转放置abcdef后面

    即形成 12345abcdef

    我们分析:如今数子字符在前面了,字母字符在后面了,这相当于将原字符串数字部分和字母部分对换了一下

    我们知道,假设分别将数字字符部分和字母字符部分逆序可形成:

    fedcba和54321

    我们将上面从后面往前面度,也就是说假设在将这两部分结合起来逆序就是

    12345abcdef

    于是归纳起来就是要写一个字符串逆转函数,先将前部分逆转,再将后部分逆转,在总体逆转

    时间复杂度为O(n)

    -------------------------------------------------------------

    三、源代码实现

    #include<iostream>
    using namespace std;
    void Reverce(char arr[], size_t left, size_t right)
    {
    	char temp;
    	for (;left < right;++left,--right)
    	{
    		temp = arr[left];
    		arr[left] = arr[right];
    		arr[right] = temp;
    	}
    }
    void LeftRotationString(char arr[], size_t size, size_t count)
    {
    	Reverce(arr, 0, count - 1);
    	Reverce(arr, count, size - 1);
    	Reverce(arr, 0, size - 1);
    }
    int main()
    {
    	char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
    	LeftRotationString(arr, 8, 3);
    	for (auto e : arr)
    		cout << static_cast<char>(e) << endl;
    }


  • 相关阅读:
    验证guid()类型值的函数
    jquery时期到计时插件
    最简单快速的Apache二级域名实现方法
    线程和线程的常用方法
    Mobile WEB前端研发流程
    HTML5标莶使用初级技巧
    前端开发中常见的HTML5标签乱用案例
    iPad应用的10大用户体验设计准则
    移动平台3G手机网站前端开发布局技巧汇总
    分享HTML 5的参考手册,演讲稿,电子书和教程
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3910476.html
Copyright © 2011-2022 走看看