面试题之O(n)内旋转字符串
样例:
字符串“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)内旋转字符串的更多相关文章
- 关于一道面试题,使用C#实现字符串反转算法
关于一道面试题,使用C#实现字符串反转算法. 题目见http://student.csdn.net/space.php?do=question&ac=detail&qid=490 详细 ...
- 【剑指offer】面试题 20. 表示数值的字符串
面试题 20. 表示数值的字符串
- .NET面试题解析(03)-string与字符串操作
系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 字符串可以说是C#开发中最常用的类型了,也是对系统性能影响很关键的类型,熟练掌握字符串的操作非常重要. 常 ...
- 基于visual Studio2013解决面试题之0610删除重复字符串
题目
- .NET面试题系列(22)字符串暂存池(缓冲池)
序言 字符串不可变性,字符串的‘暂存池’两个特性 字符串是引用类型,程序中会存在大量的字符串对象,如果每次都创建一个字符串对象,会比较浪费内存.性能低,因此CLR做了“暂存池”(拘留池,缓冲池,暂存池 ...
- 【面试题004】c/c++字符串,替换空格
一,c/c++字符串 1.C/C++中每个字符串都以字符’\0‘作为结尾,这样我们就能很方便地找到字符串的最后尾部. 由于这个原因每个字符串都有一个额外的开销,注意字符串越界的问题: 2.C/C+ ...
- 基于Visual C++2013拆解世界五百强面试题--题4-double转换成字符串
请用C语言实现将double类型数据转换成字符串,再转换成double类型的数据.int类型的数据 想要完成题目中的功能,首先我们的先对系统存储double的格式有所了解. 浮点数编码转换使用的是IE ...
- 基于visual Studio2013解决面试题之1202最大公共字符串
题目
- 面试题:判断连个字符串是否互为回环变位(Circular Rotaion)
题干: 如果字符串 s 中的字符循环移动任意位置之后能够得到另一个字符串 t,那么 s 就被称为 t 的回环变位(circular rotation). 例如,ACTGACG 就是 TGACG ...
随机推荐
- bzoj1758Wc10重建计划——solution
1758: [Wc2010]重建计划 Time Limit: 40 Sec Memory Limit: 162 MBSubmit: 4707 Solved: 1200[Submit][Status ...
- 【代码笔记】iOS-NSSearchPathForDirectoriesInDomainsDemo
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, ...
- js 函数中形参与实参的关系
函数中形参与实参的关系 对于形参和实参的定义,在 权威指南中有着明确的定义.但是,我们更在意的是它们之间的关系,到底形参会不会影响到实参? 形参到底会不会影响到实参? 对于这个问题的答案,请先看以下两 ...
- 从零开始学习html(十二)CSS布局模型——上
一.css布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了. 布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之 ...
- Hadoop大数据初入门----haddop伪分布式安装
一.hadoop解决了什么问题 hdfs 解决了海量数据的分布式存储,高可靠,易扩展,高吞吐量mapreduce 解决了海量数据的分析处理,通用性强,易开发,健壮性 yarn 解决了资源管理调度 二. ...
- Android逆向 破解第一个Android程序
这节正式开始破解编写的第一个Android工程,打开Android Killer,把第一节自己编写的Android apk拖入Android Killer. PS: 如果Android Killer不 ...
- DOS中的ECHO命令详解
1. 作为控制批处理命令在执行时是否显示命令行自身的开关 格式:ECHO [ON|OFF] 如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”. 2. 显示当前ECHO ...
- Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- React Native中的约束规范
参考资料:https://github.com/sunyardTime/React-Native-CodeStyle 感谢情书哥无私奉献 ##一.编程规约 ###(一) 命名规约 [强制] 代码中命名 ...
- excel、xls文件读写操作
python 常用的excel.xls文件读写操作,有两个模块 xlrd:读 xlwt:写 本次先写一个读的例子: class CaseData(object): def __init__(self, ...