剑指 Offer 58 - II. 左旋转字符串(3种方法)

news/2024/12/22 14:57:26/

题目:
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。

请定义一个函数实现字符串左旋转操作的功能。

比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:

输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2:

输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”

限制:

1 <= k < s.length <= 10000

来源:力扣(LeetCode)

一:开辟新空间

class Solution {
public:string reverseLeftWords(string s, int n) {string ans = "";for(int i = n; i < s.size(); i++){ans += s[i];}for(int i = 0; i < n; i++){ans += s[i];}return ans;}
};
ans += s[i];

利用c++中字符串的特性
也就是说,先把后面的字符串输出,再输出前面的字符串也就是相当于左转了字符串
二:多次旋转(3次旋转法,原地修改)

class Solution {
public://无论是左移还是右移都可以使用多次反转实现void reverseStr(string& s, int l, int r){while(l < r){char temp = s[r];s[r--] = s[l];s[l++] = temp;}}string reverseLeftWords(string s, int n) {//原地修改,空间复杂度O(1);reverseStr(s, 0, s.size() - 1);//先进行第一次(全体翻转)reverseStr(s, 0, s.size() - n - 1);//第二次 将第一个到倒数第n个反转reverseStr(s, s.size() - n, s.size() - 1); //第三次 将倒数第n个到最后一个反转return s;}
};

原地修改,不需要开辟额外的空间,其实也就是以时间换取空间

三:利用c++特性,原地修改

class Solution {
public:string reverseLeftWords(string s, int n) {int len =s.size();s.resize(len+n);for(int i=0;i<n;i++){s[len++] =s[i];}s.erase(0,n);return s;}
};

利用了c++中string容器的resize函数,重新定义大小
利用for循环再新开辟出的位置进行赋值操作。
s.erase(0,n);再删除前n个位置。


http://www.ppmy.cn/news/69873.html

相关文章

pcap文件格式

在通过使用wireshark工具抓取主机不同网段的数据包时&#xff0c;把抓到的数据包保存起来会发现生成的文件是.pcap文件&#xff0c;此篇博客主要介绍pcap文件的格式&#xff0c;并利用C语言的结构体知识来初窥探数据包数据。 pcap文件格式 pcap文件数据结构如下图所示&#x…

Cordova webapp实战开发:(5)如何写一个Andorid下自动更新的插件?

在 《Cordova webapp实战开发&#xff1a;&#xff08;4&#xff09;Android环境搭建》中我们搭建好了开发环境&#xff0c;也给大家布置了调用插件的预习作业&#xff0c;做得如何了呢&#xff1f;今天我们来学一下如何自己从头建立一个Andorid下的cordova插件。 本次练习你能…

智能的本质人工智能与机器人领域的64个大问题阅读笔记(三)

目录 机器智能提高到人类的水平或者人类智能下降到机器的水平&#xff0c;都可以到达图灵点。 或许图灵测试是一个自我实现的预言&#xff1a;我们&#xff08;声称&#xff09;在打造“聪明”机器的同时&#xff0c;我们也在把人变笨。 不长脑的机器和不思考的人没什么两样&…

Kubernetes架构与组件详解

Kubernetes架构与组件详解 一、Kubernetes 简介1 什么是 Kubernetes2 Kubernetes 的优势3 Kubernetes 的应用场景 二、Kubernetes 架构1 Kubernetes 架构概述2 Kubernetes 架构组件介绍2.1 控制面板组件2.2 API Server2.3 etcd2.4 kubelet2.5 kube-proxy2.6 CNI 插件2.7 容器运…

API常用类

Java API概述 API(Application Programming Interface) 应用程序编程接口 是对Java预先定义的类或接口功能和函数功能的说明文档,目的是提供给开发人员进行使用帮助说明 基本数据类型封装类 基本数据类型包装类byte ByteshortShortcharCharacterint Integerl…

在外Windows公网远程连接MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自远程内网穿透的文章&#xff1a;公网远…

OPPO关停哲库业务,工程师造芯何去何从?

5月12日&#xff08;上周五&#xff09;&#xff0c;新浪科技从OPPO处了解到&#xff0c;OPPO将终止ZEKU业务。3000多人团队突然原地解散&#xff0c;网上唏嘘声一片&#xff01; ZEKU最初成立于2019年&#xff0c;是OPPO的全资子公司&#xff0c;欧加集团百分之百注资成立。总…

Elasticsearch:结合两全其美:Elasticsearch 与 BM25 和 HNSW 的混合搜索

就搜索算法而言&#xff0c;没有万能的解决方案。 不同的算法在不同的场景下效果更好&#xff0c;有时需要算法的组合才能达到最好的效果。 在 Elasticsearch 中&#xff0c;一种流行的组合搜索算法的方法是使用混合搜索&#xff0c;将用于文本搜索的 BM25 算法与用于最近邻搜索…