剑指 Offer(第2版)面试题 58:翻转字符串

剑指 Offer(第2版)面试题 58:翻转字符串

  • 剑指 Offer(第2版)面试题 58:翻转字符串
    • 题目一:翻转单词顺序
      • 思路 1:stringstream
      • 思路 2:双指针
    • 题目二:左旋转字符串
      • 思路 1:字符串分割
      • 思路 2:3 次反转字符串

剑指 Offer(第2版)面试题 58:翻转字符串

题目一:翻转单词顺序

题目来源:77. 翻转单词顺序

思路 1:stringstream

代码:

class Solution
{
public:string reverseWords(string s){stringstream ss(s);string word;vector<string> words;while (ss >> word){words.push_back(word);}reverse(words.begin(), words.end());string ans;for (int i = 0; i < words.size(); i++){ans += words[i];if (i != words.size() - 1)ans.push_back(' ');}return ans;}
};

复杂度分析:

时间复杂度:O(n),其中 n 是字符串 s 的长度。

空间复杂度:O(n),其中 n 是字符串 s 的长度。

思路 2:双指针

代码:

class Solution
{
public:string reverseWords(string s){if (s.empty())return s;reverse(s.begin(), s.end());int n = s.size();int begin = 0, end = 0;while (begin < n){if (s[begin] == ' '){begin++;end++;}else if (s[end] == ' ' || end == n){reverse(s.begin() + begin, s.begin() + end);begin = end;}elseend++;}return s;}
};

复杂度分析:

时间复杂度:O(n),其中 n 是字符串 s 的长度。

空间复杂度:O(n),其中 n 是字符串 s 的长度。

题目二:左旋转字符串

题目链接:78. 左旋转字符串

思路 1:字符串分割

代码:

class Solution
{
public:string leftRotateString(string str, int n){if (n == 0)return str;int len = str.size();n %= len;return str.substr(n) + str.substr(0, n);}
};

复杂度分析:

时间复杂度:O(len),其中 len 是字符串 str 的长度,

空间复杂度:O(1)。

思路 2:3 次反转字符串

代码:

class Solution
{
public:string leftRotateString(string str, int n){if (n == 0)return str;int len = str.size();n %= len;reverse(str.begin(), str.begin() + n);reverse(str.begin() + n, str.end());reverse(str.begin(), str.end());return str;}
};

复杂度分析:

时间复杂度:O(len),其中 len 是字符串 str 的长度,

空间复杂度:O(1)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/582916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv5改进 | 2023主干篇 | 华为最新VanillaNet主干替换Backbone实现大幅度长点

一、本文介绍 本文给大家来的改进机制是华为最新VanillaNet网络&#xff0c;其是今年最新推出的主干网络&#xff0c;VanillaNet是一种注重极简主义和效率的神经网络架构。它的设计简单&#xff0c;层数较少&#xff0c;避免了像深度架构和自注意力这样的复杂操作(需要注意的是…

【每日试题】java面试之springboot框架

Spring Boot是基于Spring框架的一种快速开发脚手架。它简化了Spring应用的初始搭建和配置过程&#xff0c;使开发人员能够更加专注于业务逻辑的实现。 Spring Boot的特点有以下几点&#xff1a; 简化配置&#xff1a;Spring Boot的核心设计理念是约定大于配置。它通过自动配置…

HTML使用JavaScript的三种方式

要使用 JavaScript&#xff0c;你可以在 HTML 文件中的 <script> 标签中编写代码&#xff0c;或者将代码保存到一个单独的 .js 文件中并在 HTML 文件中引入。以下是一些常用的 JavaScript 使用方式&#xff1a; 内联 JavaScript&#xff1a;在 HTML 文件的 <script&g…

Erlang、RabbitMQ下载与安装教程(windows超详细)

目录 安装Erlang 1.首先安装RabbitMQ需要安装Erlang环境 2.点击下载好的.exe文件进行傻瓜式安装,一直next即可 3.配置Erlang环境变量 安装RabbitMQ 1.给出RabbitMQ官网下载址&#xff1a;Installing on Windows — RabbitMQ&#xff0c;找到 2.配置RabbitMQ环境变量&#xff0…

SparkStreaming与Kafka整合

1.3 SparkStreaming与Kafka整合 1.3.1 整合简述 kafka是做消息的缓存&#xff0c;数据和业务隔离操作的消息队列&#xff0c;而sparkstreaming是一款准实时流式计算框架&#xff0c;所以二者的整合&#xff0c;是大势所趋。 ​ 二者的整合&#xff0c;有主要的两大版本。 kaf…

JVM 常用知识和面试题

1. 什么是JVM内存结构&#xff1f; jvm将虚拟机分为5大区域&#xff0c;程序计数器、虚拟机栈、本地方法栈、java堆、方法区&#xff1b; 程序计数器&#xff1a;线程私有的&#xff0c;是一块很小的内存空间&#xff0c;作为当前线程的行号指示器&#xff0c;用于记录当前虚拟…

前端子项目共用node_modules

项目目录结构如下 首先按上面的结构新建三个项目&#xff0c;有一定前端经验的都知道怎么处理&#xff0c;我就不多介绍了。 1&#xff0c;子项目1 package.json如下&#xff0c;我只安装了vue index.js如下 2&#xff0c;子项目2 package.json如下&#xff0c;我安装了…

如何准备 Azure 信息保护云退出计划

Azure 信息保护&#xff08;AIP&#xff09;是一项服务&#xff0c;它可以帮助您发现、分类、标记和保护敏感的文档和电子邮件。如果您想停止使用 AIP&#xff0c;您需要做好一些准备工作&#xff0c;以便在需要时能够顺利地从云服务退出。本文将介绍如何准备 AIP 云退出计划的…

uniapp 底部导航栏 tabBar

在 static 文件夹中新建文件夹 tabBar&#xff0c;放入标签图片 源素材如下&#xff1a; 在 pages.json 中添加 // 底部导航"tabBar": {// tab默认文字颜色"color": "#bfbfbf",// tab选中后的文字颜色"selectedColor": "#153c65&…

华为鸿蒙应用--登录页:网络请求、自定义Loading、MD5密码加密、emitter订阅状态变化、持久化登录状态、隐藏软键盘-ArkTs

HarmonyOS系列 华为鸿蒙应用--底部导航栏Tabs&#xff08;自适应手机和平板&#xff09;-ArkTs_华为鸿蒙应用 csdn 底部导航栏-CSDN博客 华为鸿蒙应用--欢迎页SplashPage倒计时跳过&#xff08;自适应手机和平板&#xff09;-ArkTs_app.media.ic_splash_page_background-CSDN…

语言模型:从n-gram到神经网络的演进

目录 1 前言2 语言模型的两个任务2.1 自然语言理解2.2 自然语言生成 3 n-gram模型4 神经网络语言模型5 结语 1 前言 语言模型是自然语言处理领域中的关键技术之一&#xff0c;它致力于理解和生成人类语言。从最初的n-gram模型到如今基于神经网络的深度学习模型&#xff0c;语言…

Apache OFBiz RCE漏洞复现(CVE-2023-51467)

0x01 产品简介 Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。 0x02 漏洞概述 漏洞成因 该系统的身份验证机制存在缺陷,可能允许未授权用户通过绕过标准登录流程来获取后台访问权限。此外,在…

Spring 对请求参数的优雅处方式(重写序列化方法)

Spring 对请求参数的优雅处方式&#xff08;重写序列化方法&#xff09; 描述前端传参方式介绍代码实现&#xff1a;1、重写序列化方式代码2、设置类自动加载到 Spring 中 描述 在我们日常项目开发过程中&#xff0c;往往会遇到前端请求参数中有空格的情况&#xff0c;前端提交…

Zabbix“专家坐诊”第221期问答汇总

问题一 Q&#xff1a;使用官方docker模板Template App Docker&#xff0c;监控docker镜像&#xff0c;有一项监控项docker.data_usage有报错&#xff0c;不知道哪里问题&#xff1a;Cannot fetch data: Get “http://1.28/system/df”: context deadline exceeded (Client.Time…

【MATLAB】交叉验证求光滑因子的广义神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 交叉验证求光滑因子的广义神经网络时序预测算法的基本原理如下&#xff1a; 首先&#xff0c;我们需要了解什么是交叉验证和光滑因子。交叉验证是一种评估模型性能的常用方法&#xff0c…

C++ 657. 机器人能否返回原点 简单模拟

在二维平面上&#xff0c;有一个机器人从原点 (0, 0) 开始。给出它的移动顺序&#xff0c;判断这个机器人在完成移动后是否在 (0, 0) 处结束。 移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R&#xff08;右&#xff09;&#xff0c;L&a…

RK3568平台开发系列讲解(Linux系统篇)PWM系统编程

🚀返回专栏总目录 文章目录 一、什么是PWM二、PWM相关节点三、PWM应用编程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 PWM 的系统编程。 一、什么是PWM PWM,即脉冲宽度调制(Pulse Width Modulation)

服务器Ubuntu系统安装

Ubuntu系统安装 系统下载制作系统盘1、下载系统盘制作软件2、制作启动盘 系统安装1、选择U盘启动2、安装系统 安装向日葵1、下载地址2、配置wayland 系统下载 https://mirrors.ustc.edu.cn/ubuntu-releases/22.04/ 推荐使用&#xff1a; 制作系统盘 1、下载系统盘制作软件 …

边缘智能网关在智慧大棚上的应用突破物联网大关

边缘智能网关在智慧大棚上的应用&#xff0c;是现代农业技术的一大突破。通过与农作物生长模型的结合&#xff0c;边缘智能网关可以根据实时的环境数据和历史数据&#xff0c;预测农作物的生长趋势和产量&#xff0c;提供决策支持和优化方案。这对于农民来说&#xff0c;不仅可…

使用 Django 的异步特性提升 I/O 类操作的性能

目录 一、引言 二、Django 的异步特性 三、提升 I/O 类操作的性能 四、示例代码 五、总结 一、引言 Django 是一个高级的 Python Web 框架&#xff0c;它以快速开发和简洁的代码而闻名。然而&#xff0c;对于一些 I/O 密集型的应用程序&#xff0c;Django 的同步特性可能…