面试经典 150 题 20 —(数组 / 字符串)— 151. 反转字符串中的单词

news2024/9/28 7:26:33

151. 反转字符串中的单词

在这里插入图片描述

方法一
class Solution {
public:
    string reverseWords(string s) {
        istringstream instr(s);
        vector<string> words{};
        string word;
        while(instr>>word){
            words.push_back(word);
        }
        
        int length = words.size();
        string result = words[length-1];
        for(int i = length - 2 ; i >= 0; i--){
            result = result + " " + words[i];
        }
        return result;
    }
};
方法二
class Solution {
public:
    // 1. 先去除空格
    // 2. 整体反转
    // 3. 每个单词反转
    string reverseWords(string s) {
        int k = 0;
        // 删开头
        while(s[k] == ' '){
            k++;
        }
        s.erase(s.begin(), s.begin() + k);

        // 删末尾 不能一开始就定义length = s.size(),因为s.size()是变化的
        k = s.size() - 1;
        while(s[k] == ' '){
            k--;
        }
        s.erase(s.begin() + k + 1, s.end());

        // 删中间
        int i = 0, j = 0;
        while (i < s.size()) {
            if(s[i] != ' '){
                i++;
            }
            else{
                j = i;
                while(s[j] == ' '){
                    j++;
                }
                if(j-i>1){
                    // erase是左闭右开
                    s.erase(s.begin()+i+1,s.begin()+j);
                }
                // 这里已经是删除完了的,所以加一即可,而不是i=j
                i++;
            }
        }

        // 反转字符串
        reverse(s.begin(), s.end());

        // 反转单词
        int tag = 0;
        for (i = 0; i < s.size(); ++i) {
            if (s[i] == ' ') {
                reverse(s.begin() + tag, s.begin() + i);
                tag = i + 1;
            }
        }
        reverse(s.begin() + tag, s.begin() + i);

        return s;
    }
};

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

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

相关文章

怒刷LeetCode的第26天(Java版)

第一题 题目来源 64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09; 题目内容 解决方法 方法一&#xff1a;动态规划 可以使用动态规划来解决这个问题。 首先创建一个与网格大小相同的二维数组dp&#xff0c;用于存储从起点到每个位置的最小路径和。然后初始化dp[0…

shiro反序列化和log4j

文章目录 安装环境shiro漏洞验证log4j 安装环境 进入vulhb目录下的weblogic&#xff0c;复现CVE-2018-2894漏洞&#xff1a; cd /vulhub/shiro/CVE-2010-3863查看docker-compose的配置文件&#xff1a; cat docker-compose.yml如图&#xff0c;里面有一个镜像文件的信息和服…

136.【JUC并发编程_02】

JUC并发编程 (四)、共享模型之管程1.wait notify(1).小故事_为什么需要wait(2).wait notify 的工作原理(3).API介绍 2.wait notify 的正确使用步骤 ⭐(1).sleep 和 wait 的区别(2).步骤1_产生的问题(3).步骤2_wait notify 改进产生问题(4).步骤3_产生叫错人问题 (虚假唤醒)(5).…

opencv安装成功之后运行代码还是出错

错误提示 Traceback (most recent call last): File "F:\download\55957_人工智能基础与应用&#xff08;微课版&#xff09;_源代码\OpenCV\camera.py", line 4, in <module> import cv2 File "F:\software\anaconda\envs\tensorflow\cv2\__init__.py&q…

Unity 热更新技术 | (一) 热更新的基本概念原理及主流热更新方案介绍

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity系统学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作 &…

什么是强缓存、协商缓存?

为了减少资源请求次数,加快资源访问速度,浏览器会对资源文件如图片、css文件、js文件等进行缓存,而浏览器缓存策略又分为强缓存和协商缓存,什么是强缓存?什么是协商缓存?两者之间的区别又是什么?接下来本文就带大家深入了解这方面的知识。 强缓存 所谓强缓存,可以理解…

声音生成评价项目AudioLDM_eval项目配置过程

文章目录 引言正文问题一&#xff1a;模型下载不了问题二 TypeError: pad_center() takes 1 positional argument but 2 were given问题三 AttributeError: module numpy has no attribute complex. 结果 引言 对于生成的声音&#xff0c;如何进行评价&#xff0c;一般是通过计…

Matlab之查询子字符串在字符串中的起始位置函数strfind

一、功能 strfind函数用于在一个字符串中查找指定的子字符串&#xff0c;并返回子字符串在字符串中的起始位置。 二、语法 indices strfind(str, pattern) 其中&#xff0c;str是要进行查找的字符串&#xff0c;pattern是要查找的子字符串。 函数会返回一个由子字符串在字…

网络与信息安全基础知识 (软件设计师笔记)

&#x1f600;前言 在当今世界&#xff0c;我们见证了科技&#xff0c;特别是网络技术的繁荣发展&#xff0c;这种发展不仅让我们的生活变得更加便捷&#xff0c;但也带来了一系列的安全问题。网络安全不仅关系到每一个上网的个人&#xff0c;更是关乎到国家的安全和社会的稳定…

大数据要怎么样学才可以到企业级实战

大数据在企业级实战中扮演着重要角色&#xff0c;因此掌握大数据技术和应用是非常有价值的。下面将详细介绍学习大数据并达到企业级实战水平的步骤和方法。 一、基础知识准备 1. 数据基础知识&#xff1a;了解数据的概念、类型、结构等基本概念&#xff0c;并熟悉常见的数据处…

Edge 无法登录/同步问题【一招搞定】

目录 前言 一、打开 Edge 浏览器显示未同步&#xff0c;点击同步无效 二、Edge 登录报错 0x801901f4 或 0x80190001 解决方法 2.1 报错 0x801901f4 解决方法 2.1.0 Edge 登陆报错图示 2.1.1 添加 Edge 推荐的 DNS 地址 2.1.2 重新登录 Edge 账号成功 2.2 报错 0x801…

第四章 树和二叉树

第四章 树和二叉树 树的基本概念树的概念树的相关术语 二叉树二叉树基本概念二叉树的性质 二叉树的存储结构二叉树的顺序存储结构二叉树的链式存储结构 二叉树的遍历二叉树遍历的递归实现二叉树的层次遍历二叉树遍历的非递归实现 树和森林树的存储结构树、森林与二叉树的关系树…

【低代码开发】:低代码开发助力应用创新

低代码开发&#xff1a;加速应用开发的未来趋势 引言什么是低代码以及功能特点&#xff1f;什么是低代码开发&#xff1f;低代码平台的特点和功能低代码平台的应用场景和优势低代码的优点低代码的缺点低代码平台项目开发流程选择和实施低代码平台 低代码未来的发展趋势低代码平…

Java基础(变量篇)

变量是Java程序中基本的存储单元&#xff0c;变量名有三个基本要素&#xff1a;数据类型、变量名和值。变量名是一块内存单元的名称&#xff0c;就像门牌号一样&#xff0c;通过变量可以找到它表示的内存单元&#xff0c;并对这块内存单元进行操作。在Java中变量必须声明后使用…

英国/法国/意大利/德国/西班牙,电动交通设备配件等相关政策更新

产品安全 合规政策更新&#xff01; 首先请看邮件内容 尊敬的卖家&#xff1a; 您好&#xff01; 我们此次联系您是因为您正在销售需要审批流程的商品。为此&#xff0c;亚马逊正在实施审批流程&#xff0c;以确认我们网站上提供的商品类型须符合指定的认证标准。要在亚马逊…

Cesium小技巧:快速打开API文档

学习Cesium.js的人&#xff0c;肯定经常看官方示例&#xff0c; 网址如下&#xff1a; https://sandcastle.cesium.com/ 有个小技巧&#xff0c;可以快速打开具体类的API文档 在示例中&#xff0c;双击具体类名或方法名&#xff0c;会出现一个提示框 单击或右键菜单-在新标…

Linux系统编程:Linux基础

Linux基本使用 安装 这就不说了网上很多教程&#xff0c;随便一个Linux版本都可以&#xff0c;因为命令都差不多。 检查是否有网络 检查网络有以下几个推测方法&#xff0c;如果没有网络的话就按照这几个可能出现问题的地方对症下药寻找解决办法即可&#xff1a; ctrl al…

蓝桥杯基础---切面条

切面条 一根高筋拉面&#xff0c;中间切一刀&#xff0c;可以得到2根面条。 如果先对折1次&#xff0c;中间切一刀&#xff0c;可以得到3根面条。 如果连续对折2次&#xff0c;中间切一刀&#xff0c;可以得到5根面条。 那么&#xff0c;连续对折10次&#xff0c;中间切一刀…

MySQL数据库安装和介绍

一.数据库的介绍 1.1.MySQL数据库是什么&#xff1f; 一款深受欢迎的开源关系型数据库&#xff0c;Oracle旗下的产品&#xff0c;遵守GPL协议&#xff0c;可以免费使用与修改。 官网&#xff1a;MySQL 特点&#xff1a; 性能卓越、服务稳定 开源、无版权限制、成本低 …

优雅而高效的JavaScript——函数柯里化

&#x1f642;博主&#xff1a;小猫娃来啦 &#x1f642;文章核心&#xff1a;优雅而高效的JavaScript——函数柯里化 文章目录 前言函数柯里化的概念和原理介绍函数柯里化的优点和应用场景函数柯里化的具体实现方式和实例分析函数柯里化在实际项目中的应用函数柯里化与函数式编…