剑指offer:左旋转字符串
题目描述:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
思路分析:
1. 第一个想到的方法就是利用一个辅助空间来完成,对于输入k的长度实际上当它大于字符串的长度时,真正进行左旋转操作的就只有n%str.length()次,因此通过%操作来确认在哪个位置将原字符串分开。之后用两个for循环分别给新字符串赋值即可。
2. 不利用辅助空间的方式。可以发现对于字符串实际可以划分为两部分,第一部分为进行了左移操作的字符串,第二部分为未进行左移操作的字符串。那么由于是循环左移,实际就是需要将第一部分字符串的头与第二部分字符串的尾相连,那么可以考虑用翻转的方式,首先翻转第一部分字符串为“ZYXdefabc”,再翻转第二部分字符串为"ZYXcbafed",此时就将两部分的头尾相连,最后再将整体的字符串进行一次翻转,就为所求的结果"defabcXYZ"。时间复杂度为O(n),空间复杂度为O(1)。
代码:
思路一:
class Solution {
public:
string LeftRotateString(string str, int n) {
int len = str.length();
if(len<= || n<=)
return str;
n = n%len;
string new_str = str;
int index = ;
for(int i=n; i<len; i++)
{
new_str[index] = str[i];
index++;
}
for(int i=;i<n; i++)
{
new_str[index] = str[i];
index++;
}
return new_str;
}
};
思路二:
class Solution {
public:
string LeftRotateString(string str, int n) {
int len = str.length();
if(len<= || n<=)
return str;
Inverse(str, , n-);
Inverse(str, n, len-);
Inverse(str, , len-);
return str;
}
void Inverse(string &str, int l, int r)
{
for(int i=l; i<=(l+r)/; i++)
{
swap(str[i], str[l+r-i]);
}
}
};
剑指offer:左旋转字符串的更多相关文章
- 剑指Offer 左旋转字符串
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abc ...
- 剑指Offer——左旋转字符串
题目描述: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”ab ...
- 【算法训练营day8】LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58-II. 左旋转字符串
[算法训练营day8]LeetCode344. 反转字符串 LeetCode541. 反转字符串II 剑指Offer05. 替换空格 LeetCode151. 翻转字符串里的单词 剑指Offer58- ...
- 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串
第一题344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这 ...
- 剑指offer--38.左旋转字符串
时间限制:1秒 空间限制:32768K 热度指数:173814 本题知识点: 字符串 题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果. ...
- 剑指Offer-43.左旋转字符串(C++/Java)
题目: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abcX ...
- 剑指offer42 左旋转字符串
自己想的一个新的写法,如果不排除length=0的情况,下面那个while是死循环 class Solution { public: string LeftRotateString(string st ...
- 剑指Offer:旋转数组的最小数字【11】
剑指Offer:旋转数组的最小数字[11] 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4 ...
- 《剑指offer》旋转数组中的最小数字
本题来自<剑指offer> 旋转数组中的最小数字 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例 ...
- ⛅剑指 Offer 11. 旋转数组的最小数字
20207.22 LeetCode 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小 ...
随机推荐
- JavaWeb 之 BeanUtils 工具类
在上一个用户登录案例中,当从浏览器接收参数后,还需要创建 JavaBean 类,对其的属性每一项赋值,如果属性少,可以手动完成,但是当属性非常多,这时就发现非常不方便,在这里提供一个可以封装 Java ...
- RSA加密&解密【Java&Scala】
一.简介 RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用. RSA公开密钥密码体制.所谓公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解 ...
- mysql replace into 实现存在则更新,不存在则插入
测试用的mysql数据库: 新建测试表: CREATE TABLE `test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `text` varchar(2 ...
- AM335X有关MMC的启动参数问题分析
AM335X有关MMC的启动参数问题分析 一. 问题来源 硬件平台:AM335X芯片 SDK版本:ti-processor-sdk-linux-am335x-evm-03.00.00.04-Linux ...
- JQuery中两个ul标签的li互相移动
实例 <html > <head> <meta http-equiv="Content-Type" content="text/html; ...
- IDEA如何配置tomcat及建一个web项目
需求:项目工程可能别人已经建好了,我需要把项目导入到自己的IDEA并配置tomcat运行; 准备工作:1.本地的tomat服务器 2.IDEA工具 3.JDK 步骤: 1.点击Run -> Ed ...
- 玩转DNS服务器——Bind服务
合理的配置DNS的查询方式 实验环境: 虚拟机:VMware® Workstation 15 Pro 均使用NAT连接 网段为192.168.1.0/24 DNS 服务器 ---- Centos ...
- Centos7服务器搭建部署显卡计算环境以及常用软件的安装使用
安装好anaconda的服务器上会more你已经安装好jupyter notebook,执行下面的命令可以提供链接地址允许远程浏览器打开并访问: jupyter notebook --no-brows ...
- 【python】raise_for_status()抛出requests.HTTPError错误
1.首先看下面代码的运行情况 import requests res = requests.get("https://www.csdn.net/eee", headers=head ...
- vue之组件通信
vue组件通信一般分为以下几种情况: 1.父子组件通信: 2.兄弟组件通信: 3.跨多层级组件通信: 一.父子通信 父组件通过props传递数据给子组件,子组件通过emit发送事件传递数 ...