定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。
请实现字符串左旋转的函数,分析算法复杂度

当时答的时候用的方法太渣了,

思路是每次左移一位,移动K次。

12345678→23456781→34567812→45678123

这是我写的实现代码

 1 void LeftMove(char* str,int k,int n)
 2 {
 3     k = k%n;
 4     if (NULL == str||k<1||n<1)
 5     {
 6         return;                     //输出合法性检测
 7     }
 8     while(k--)
 9     {
10         int t = str[0];
11         for(int i=1;i<n;i++)
12         {
13            str[i-1] = str[i];
14         }
15         str[n-1] = t;
16     }
17 }

虽然这个算法可以实现数组的循环右移,但是算法复杂度为O(n^2)

后面在别人博客上看见一种比较简单有效而且复杂度比较好的方法---逆序

假设我要移动“12345678”的3位,我可以将字符串分为123,45678两部分

逆序排列123:321

逆序排列45678:87654

全部逆序32187654:45678123

这样也实现了左旋3位数

这是我实现的代码,已测试正确

 1 char *Reverse(char *first,char *end)             //逆序first指针到end指针之间的字符
 2 {
 3     char *temp =first;
 4     if (first>=end||NULL==first||NULL==end)
 5     {
 6         return temp;
 7     }
 8     while (first<end)
 9     {
10         swap(*first++,*end--);
11     }
12     return temp;
13 }
14 void swap(char&a,char&b)
15 {
16     char temp = a;
17            a = b;
18            b = temp;
19 }
20 char* LeftMove(char *str,int len,int n)             //左旋函数
21 {
22     if (NULL==str||n<0)
23     {
24         return str;
25     }
26     n = n%len;
27     Reverse(str,str+n-1);
28     Reverse(str+n,str+len-1);
29     Reverse(str,str+len-1);
30     return str;
31 }

算法复杂度为O(n)

总之还得再继续努力,特别是在数据结构和算法要下工夫,这样下一次笔试就能胸有成竹了!

转载于:https://www.cnblogs.com/xijiyuan/p/3715191.html

多益网络2014校招的一道笔试题---左旋字符串相关推荐

  1. 2014 WAP校园招聘笔试题

    2014 WAP校园招聘笔试题 Problem's Link:   http://www.doc88.com/p-6751117015483.html WAP公司笔试题 We are planning ...

  2. 华为2018届校招技术岗笔试题及个人解答

    前言 昨天(9.13)参加了华为2018届的技术岗笔试,特此总结一下笔试的题目和我个人的解答思路. 笔试题一共是三道编程题,大致是数值反向输出,比较和排序,相对较基础. PS:由于没有截图,所以题目是 ...

  3. 给定一个数值,输出符合中国人习惯的读法--记一道笔试题

    题目:给定一个数字,最大小于一万亿,输出符合中国人习惯的读法,例如: a.12输出:十二 b.102输出:一百零二 c.1002输出:一千零二 d.112输出:一百十二 e.10112输出:一万零一百 ...

  4. 一道笔试题--求二进制数1的个数

    要进一家新公司难免要进行笔试,虽然笔试通过的人很多都有背题之嫌,但是统计意义上最起码可以看出一个程序员的认真程度,毕竟很多公司的考题也不是自己创的,也是在网上偷的,允许公司偷题就必须允许应聘者偷答案. ...

  5. 蘑菇街2015校招 Java研发笔试题 详解,2015java

    蘑菇街2015校招 Java研发笔试题 详解,2015java 1. 对进程和线程描述正确的是( ) A.  父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间. B.  改变 ...

  6. C语言单链表实现FCFS算法,2014腾讯实习笔试题

    2014腾讯实习笔试题 1. 关于二叉树,下面说法正确的是() A. 对于N个节点的二叉树,其高度为nlog2n; B. 一个具有1025个节点的二叉树,其高度范围在11~1025之间 C. 二叉树的 ...

  7. C#在类型实例化时都干了什么:从一道笔试题说开去

    C#在类型实例化时都干了什么:从一道笔试题说开去 原文来自:http://www.cnblogs.com/instance/archive/2011/05/27/2059409.html 前一阵子我参 ...

  8. 阿里校招 数据分析师 笔试题

    2015年8月19日,阿里校招数据分析师笔试题.共计21题(貌似统计漏了一题,应该是单选少了一题,凑合看吧),选择题每个人的都不一样,问答题是一样的.暂时没有答案,希望对大家有用. 单选题: 1观测宇 ...

  9. 【机试题】2014大疆嵌入式笔试题(附超详细解答,下篇)

    上一篇主要是对<2014大疆嵌入式笔试题>的前一部分进行了解答,本文主要是对接下来的几道题进行解答.想要参考上一篇的点击链接:[机试题]2014大疆嵌入式笔试题(附超详细解答,上篇). 嵌 ...

最新文章

  1. python---websocket的使用
  2. java 桶排序_[图解] 桶排序
  3. 用户重要数据转移方法〖罗斌个人工作经验谈〗
  4. sp烘焙流程_3分钟带你快速入门substance painter 贴图制作
  5. 指针嵌套指针 拷贝_C++智能指针小结
  6. 牛客网-斐波那契数列
  7. jquery ajax error函数和及其参数详细说明
  8. python os.urandom 安全_python SystemRandom/os.urandom总是有足够的熵来获得良好的加密
  9. The ntpath module
  10. webpack之externals操作三部曲--正确的姿势
  11. redis 类型、方法
  12. 第七章:nginx的rewrite规则详解
  13. 制作并使用9-patch图像
  14. mysql sql执行慢_Mysql执行查询语句慢的解决方式
  15. 354.俄罗斯套娃信封问题
  16. WinHttp c++ 介绍及应用
  17. Win10永久禁用键盘上的num lock键,解决打字时经常误触的困扰
  18. 洛谷P2678 Java解法
  19. Java 17新特性,快到起飞?
  20. 重复读取输入流InputStream

热门文章

  1. mysql数据类型的验证_MYSQL数据类型详解
  2. wordpress雪花下雪WP Snow Effect插件
  3. c# 智能升级程序代码(1)
  4. 5个学习Linux命令站点推荐
  5. ubuntu动态截图(GIF动画)
  6. jquery实现双击事件不触发单击事件
  7. 20个有用的 PHP + jQuery 组件和教程
  8. linux usb键盘驱动详解
  9. python将txt文件转为excel格式以及写入excel超过65536行报错问题解决方法
  10. Spring Cloud Nacos