样例:

字符串“abcd1234"左移3位结果为”234abcd1“

K:左移位数

L:字符串长度

方案1:暴力 O(K * L)

可以每次将数组中的元素左移一位,循环K次。

abcd1234  ->4abcd123 ->34abcd12->234abcd1

算法复杂度为O(K * L)

方案2:暴力+公式变形 O(N^2)

大家开始可能会有这样的潜在假设,K<L。事实上,很多时候也的确是这样的。但严格来说,我们不能用这样的“惯性思维”来思考问题。尤其在编程的时候,全面地考虑问题是很重要的,K可能是一个远大于L的整数,在这个时候,上面的解法是需要改进的。仔细观察循环左移的特点,不难发现:每个元素左移L位后都会回到自己的位置上。因此,如果K > L,左移K-L之后的数组序列跟左移K位的结果是一样的,进而可得出一条通用的规律:
左移K位之后的情形,跟左移K= K % N位之后的情形一样

方案三:巧妙三次翻转 0(N)算法:

三次翻转操作:

第一次:  adcd1变成1dcba

第二次:  234变成432

两此翻转之后结果是:1dcba432

第三次:  然后将得到的结果整体再翻转一次:234abcd1

注意:如果左移位数K大于字符串长度L,那么左移K位和左移K%L结果是一样的

code:

#include <bits/stdc++.h>
using namespace std;
void f(char str[],int x,int y)
{
for(;x<y;x++,y--)
{
char temp=str[y];
str[y]=str[x];
str[x]=temp;
}
}
int main()
{
char str[]={'a','b','c','d','','','',''};
int k=;//左移3位 即234abcd1
int l=; if(k>l)
k=k%l;//如果k>l 那么左移k位和左移k%l位结果是一样的 f(str,,l-k-);
cout<<str<<endl; f(str,l-k,l-);
cout<<str<<endl; f(str,,l-);
cout<<str<<endl; return ;
}

面试题之O(n)内旋转字符串的更多相关文章

  1. 关于一道面试题,使用C#实现字符串反转算法

    关于一道面试题,使用C#实现字符串反转算法. 题目见http://student.csdn.net/space.php?do=question&ac=detail&qid=490 详细 ...

  2. 【剑指offer】面试题 20. 表示数值的字符串

    面试题 20. 表示数值的字符串

  3. .NET面试题解析(03)-string与字符串操作

      系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 字符串可以说是C#开发中最常用的类型了,也是对系统性能影响很关键的类型,熟练掌握字符串的操作非常重要. 常 ...

  4. 基于visual Studio2013解决面试题之0610删除重复字符串

     题目

  5. .NET面试题系列(22)字符串暂存池(缓冲池)

    序言 字符串不可变性,字符串的‘暂存池’两个特性 字符串是引用类型,程序中会存在大量的字符串对象,如果每次都创建一个字符串对象,会比较浪费内存.性能低,因此CLR做了“暂存池”(拘留池,缓冲池,暂存池 ...

  6. 【面试题004】c/c++字符串,替换空格

      一,c/c++字符串 1.C/C++中每个字符串都以字符’\0‘作为结尾,这样我们就能很方便地找到字符串的最后尾部. 由于这个原因每个字符串都有一个额外的开销,注意字符串越界的问题: 2.C/C+ ...

  7. 基于Visual C++2013拆解世界五百强面试题--题4-double转换成字符串

    请用C语言实现将double类型数据转换成字符串,再转换成double类型的数据.int类型的数据 想要完成题目中的功能,首先我们的先对系统存储double的格式有所了解. 浮点数编码转换使用的是IE ...

  8. 基于visual Studio2013解决面试题之1202最大公共字符串

     题目

  9. 面试题:判断连个字符串是否互为回环变位(Circular Rotaion)

    题干:   如果字符串 s 中的字符循环移动任意位置之后能够得到另一个字符串 t,那么 s 就被称为 t 的回环变位(circular rotation).   例如,ACTGACG 就是 TGACG ...

随机推荐

  1. 关于python操作带有中文文件名报错的解决办法

    python代码的编码格式       #coding:utf-8 在操作文件时,如果文件名带有中文,则需要将文件路径以Unicode的编码格式进行操作 具体的方式如下 path = "你的 ...

  2. 数据库查询字段为null 时,返回0

    oracle select nvl(字段名,0) from 表名; sqlserver select isnull(字段名,0) from 表名; mysql select ifnull(字段名,0) ...

  3. idea配置热部署

    第一步:添加依赖使用spring-boot-devtools提供的开发者工具spring-boot项目中引入如下依赖 <dependency><groupId>org.spri ...

  4. JavaScript实现时间查询

    首先要引入js文件和css文件 <script src="jquery-1.11.2.min.js"></script> <script src=&q ...

  5. Android studio Connection failed (dl.google.com)

    公司的网,莫名其妙的不能更新了,却可以下载compile文件... 于是乎FQ,hosts,修改studio.exe.vmoptions文件 然并卵,都特么不行 搞了一天还是不行 这种问题或许可以找到 ...

  6. 团队项目第二阶段个人进展——Day1

    一.昨天工作总结 冲刺第一天,查看了第一阶段的代码 二.遇到的问题 写个的代码发现看不懂了 三.今日工作规划 重新设计页面布局

  7. ASP.NET Core Razor生成Html静态文件

    一.前言 最近做项目的时候,使用Util进行开发,使用Razor写前端页面.初次使用感觉还是不大习惯,之前都是前后端分离的方式开发的,但是使用Util封装后的Angular后,感觉开发效率还是杠杠滴. ...

  8. ubuntu下编译qt5

    编译步骤参考: http://doc.qt.io/qt-5/linux.html 我们使用源代码和编译目录分离的编译方式, 这样避免编译主机系统和目标系统间的独立. 参考: Qt Configure ...

  9. Android Activity切换与Activity间数据交互

    在Android程序内部, startActivity借助Intent来启动一个子Activity(使用父子关系进行表述,只为表达清晰,Android中并未有父子Activity的概念).如下: In ...

  10. [CENTOS7] 将域群组加入到Sudoer里

    文章来源:https://derflounder.wordpress.com/2012/12/14/adding-ad-domain-groups-to-etcsudoers/ Adding AD d ...