面试题之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 ...
随机推荐
- 100行代码实现现代版Router
原文:http://www.html-js.com/article/JavaScript-version-100-lines-of-code-to-achieve-a-modern-version ...
- DataTable的数据或表结构复制
把datatable的结构全部数据或部分数据复制到一个新的datatabledatatable复制表结构:我们可以使用.clone()方法: DataTable oldDT = GetDataTabl ...
- 关于latex编译中文不显示问题的解决方法。
我的编译环境是texlive2018 + texstudio 配置如图 默认编码格式为utf8 直接上代码 %\documentclass{article} %\usepackage{xeCJK} \ ...
- Geolocation API
Geolocation API--地理定位 navigator.geolocation getCurrentPosition() 触发请求用户共享地理定位信息的对话框 接收3个参数: 1.成功回调函数 ...
- Linux打包、压缩与解压详解
介绍:在Windows下最常见的压缩文件就只有两种,另一个是.rar,它有.gz..tar.gz.tgz.bz2..Z..tar等众多的压缩文件名,本文就来对这些常见的压缩文件进行总结,在具体总结各类 ...
- C#反射的一些经验[转载]
写代码的时候经常需要分析已有类型的信息例如:分析现有类型自动生成类, 或者为现有的类自动增加一些功能总结了一点点经验以ClassA a; 为例1. 通过typeof(ClassA) 或者 a.Get ...
- [原创]数据驱动决策:BI在零售业的数据化管理
无论是商业智能时代的应用建设,还是当下大数据时代的数据应用/数据产品建设,行业化.角色化与场景化,均是一个重要的趋势. 当下,许多企业逐步开始具备场景化思维,更为注重用户体验,业务运营更多的围绕用户的 ...
- ubuntu 搭建samba共享方案
1.samba服务安装搭建 sudo apt-get install samba sudo vim /etc/samba/smb.conf workgroup = szsoft 设置用户密码登陆方式s ...
- Vue入门系列(四)之Vue事件处理
Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一) http://www.cnblogs.com/gdsblog/p/78 ...
- vm virtualBox下 centos7 Linux系统 与本地 window 系统 网络连接 配置
由于要模拟生产环境开发,所以要在自己的电脑上安装虚拟机,这里做一下记录. centos与本机网络连接 1. 环境 虚拟机 VirtualBox-5.2.0-118431-Win Linux镜像 Cen ...