每日一题——反转字符串中的单词

news2024/11/17 23:41:36

每日一题

反转字符串中的单词

题目链接

在这里插入图片描述

思路(进阶)

  • 我们首先不考虑太多限制因素,先看如何实现字符串中单词的反转

    • 举个例子:我们要反转字符串“the sky is blue”中的单词,我们可以先将字符串中的每个字符反转“eht yks si eulb”,然后我们可以发现,从右到左看字符串正好就是我们想要的结果“blue is sky the”,所以再将整个字符串反转不就行了吗?
    • 而具体方法我们已经在反转整个字符串,分区域反转字符串分析清楚。
  • 接下来就是要考虑题目最恼火的限制条件:不允许多余空格的出现,即只允许单词之间出现一个空格,多余的空格须全部删除。

    • 当然,最容易想到的还是暴力解法,即碰到字符串串首空格(字符串开头就是空格)和单词之间的重复空格,就不断将字符串的元素前移,直至覆盖多余空格,但可想而知,这样做的效率不高。

    • 其实比较好的做法其实我们已经在移除元素中讲过,只不过上一次我们处理的是数组,而这一次处理的时字符串(实际上字符串也是数组)

      • 如果不对移除元素中的代码进行改进(如下代码),那么我们实现的就是将整个字符串中的空格删除,这显然不是我们想要的结果,我们应该让每个单词之间留有一个空格
      int slow = 0;
      for(int fast = 0; fast <= strlen(s); fast++)
      {
          if(s[fast] != ' ')
              s[slow++] = s[fast];
      }
      
      • 因此我们就要对上述代码进行改进:
      int slow = 0;
      for(int fast = 0; fast <= strlen(s); fast++)
      {
          if(s[fast] != ' ')
          {
              //只要slow不位于第一个字符(不是第一个单词),就需要手动插入空格,即确保每个单词之间有一个空格
              if(slow != 0)
                  s[slow++] = ' ';
              //如果while仍是if,那么上述插入空格的语句就会对一个单词重复执行
              //因此要用循环对每个单词进行整理
              while(s[fast] != ' ' && s[fast] != '\0')
                  s[slow++] = s[fast++];
      	}
      }
      

实现代码

void Part_reverseWords(char* s, int left, int right)	//反转指定区域的字符串
{
    while (left <= right)
    {
        char temp = s[left];
        s[left] = s[right];
        s[right] = temp;
        left++;
        right--;
    }
}
void ReplaceSpaces(char *s)		//删除多余空格
{
   int slow = 0;
    for(int fast = 0; fast < strlen(s); fast++)
    {
        if(s[fast] != ' ')
        {
            //只要slow不位于第一个字符(不是第一个单词),就需要手动插入空格,即确保每个单词之间有一个空格
            if(slow != 0)
                s[slow++] = ' ';
            //如果while仍是if,那么上述插入空格的语句就会对一个单词重复执行
            //因此要用循环对每个单词进行整理
            while(s[fast] != ' ' && s[fast] != '\0')
                s[slow++] = s[fast++];
        }
    }
    s[slow ] = '\0';	//在新的字符串末尾添加结束符
}
char* reverseWords(char* s) {
    ReplaceSpaces(s);
    int i = 0;
    //对每个单词进行反转
    for (int j = i + 1; j <= strlen(s); j++)
    {
        if (s[j] == ' ' || j == strlen(s))
        {
            Part_reverseWords(s, i, j - 1);
            i = j + 1;
        }
    }
    //对整个字符串反转
    Part_reverseWords(s,0,strlen(s) - 1);
    return s;
}

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

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

相关文章

APP渗透—微信小程序、解包反编译、数据抓包

APP渗透—微信小程序、解包反编译、数据抓包 1. 前言2. 小程序抓包2.1. 安卓系统5.0版本测试2.1.1. 添加模拟器2.1.2. 安装证书2.1.2.1. 确保在同一局域网2.1.2.2. 设置burp工具2.1.2.3. 设置模拟器代理2.1.2.4. 下载证书2.1.2.5. 修改证书2.1.2.6. 安装证书 2.1.3. 抓包测试 2…

基于海鸥算法改进的随机森林回归算法 - 附代码

基于海鸥算法改进的随机森林回归算法 - 附代码 文章目录 基于海鸥算法改进的随机森林回归算法 - 附代码1.数据集2.RF模型3.基于海鸥算法优化的RF4.测试结果5.Matlab代码6.Python代码 摘要&#xff1a;为了提高随机森林数据的回归预测准确率&#xff0c;对随机森林中的树木个数和…

【机器学习】决策树如何实现回归

【机器学习】决策树如何实现回归 文章目录 【机器学习】决策树如何实现回归1. 介绍2. 回归树的构建方法3. 递归二分法4. 回归树的剪枝5. 总结参考 1. 介绍 在 https://blog.csdn.net/qq_51392112/article/details 中&#xff0c;我们详细介绍了决策树基本内容&#xff1a;如何…

Visual Studio搭建Linux环境

环境&#xff1a;ubantu22.04.2 Visual Studio2019 可以先参考这个文章 微软官网 1.在配置之前需要搭建好远程Linux系统的环境需要安装penssh-server、gdb、gdbserver&#xff1a; sudo apt-get install openssh-server sudo apt-get install gdb gdbserver2.然后启动ssh服务 …

Filename: “/usr/local/flexlm/licenses/license.dat“

故障现象1&#xff1a;学习安装vcs时&#xff0c;出现如下打印&#xff1a; 8:30:51 (lmgrd) Servers System Date and Time: Fri May 05 2023 08:30:51 EDT 8:30:51 (lmgrd) SLOG: Summary LOG statistics is enabled. 8:30:51 (lmgrd) license manager: cant initialize:Ca…

K8S管理系统项目实战[API开发]

前端: Vueelement plus 后端: gogin 后端 Go 快速入门 Gin Web框架 K8s管理系统项目实战[API开发] 项目背景&#xff0c;整体设计&#xff0c;Client-go&#xff0c;框架搭建 一、项目背景 随着容器技术的广泛应用&#xff0c;kubernetes逐渐成为业内的核心技术&#xf…

【SpringBoot】SpringBoot集成ElasticSearch

文章目录 第一步&#xff0c;导入jar包&#xff0c;注意这里的jar包版本可能和你导入的不一致&#xff0c;所以需要修改第二步&#xff0c;编写配置类第三步&#xff0c;填写yml第四步&#xff0c;编写util类第五步&#xff0c;编写controller类第六步&#xff0c;测试即可 第一…

黎曼几何与黎曼流形

目录 0.黎曼几何 1. 欧几里得几何与黎曼几何的区别 2.黎曼流形 3.黎曼距离 4.切空间 5.黎曼均值 6. SPD矩阵如何形成黎曼流型 7.切线空间映射 8.同余变换和同余不变 9.黎曼对齐 科普性笔记&#xff0c;做了解&#xff0c;不深入。 0.黎曼几何 黎曼几何是一种基于欧几…

MySQL 表操作

目录 创建表 案例 查看表结构 修改表 案例&#xff1a; 删除表 创建表 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎 ; 说明&#xff1a; field 表示列名 dat…

【Vue学习笔记3】使用Vite开启一个Vue3工程项目

1. 什么是Vite? Vite是一个web开发构建工具。Vite 的竞品是 Webpack&#xff0c;而且按照现在的趋势看&#xff0c;使用率超过 Webpack 也是早晚的事。 Vite 主要提升的是开发的体验&#xff0c;Webpack启动调试环境需要 3 分钟都很常见&#xff0c;Vite大大缩短了这个时间。…

应急加固初试(windows sever 2008)

前言 红中(hong_zh0) CSDN内容合伙人、2023年新星计划web安全方向导师、 华为MindSpore截至目前最年轻的优秀开发者、IK&N战队队长、 吉林师范大学网安大一的一名普通学生、搞网安论文拿了回大挑校二、 阿里云专家博主、华为网络安全云享专家、腾讯云自媒体分享计划博主 …

SEO优化新手必须掌握的10个技巧和工具

随着互联网的不断发展&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;已成为网站拓展和推广的重要手段之一。对于新手而言&#xff0c;学习SEO的基础知识和技巧是至关重要的。在本文中&#xff0c;我将分享SEO优化新手必须掌握的10个技巧和工具。 1.关键词研究 关键词是…

Spring Cloud学习笔记【分布式配置中心-Config】

文章目录 SpringCloud Config概述概述传统方式弊端主要功能与GitHub整合配置 Config服务端配置与测试服务端配置(即Gitee上的配置文件)Config Demo配置Spring Cloud Config访问规则 Config客户端配置与测试bootstrap.yml说明Config客户端 Demo配置 SpringCloud Config概述 概述…

学校信息化管理系统通常包含哪些功能?

学校管理信息化是现代教育发展的必然趋势&#xff0c;随着信息技术的飞速发展&#xff0c;学校管理也逐渐地实现了信息化。信息化的学校管理已经成为教育现代化建设的重要内容&#xff0c;也是提高学校教育教学质量和保障学生安全的重要手段。 作为一款低代码开发平台&#xf…

【Shell编程】| if 判断的五个关键点

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;嵌入式领域新星创作者 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录 1、if语法格式1.1 if格式1.2 else if 和 else 2、算数比较3、文件判断4、字符串判断5、test指令测试…

Unity Audio -- (1)概览

准备工作 资源包&#xff1a; https://connect-prd-cdn.unity.com/20230208/8dab3a98-4fe1-4adf-99df-8f6c9e1058c9/creativecore-audio-2021.3LTS.zip 下载&#xff0c;解压后用Unity Hub导入本地工程&#xff0c;具体方法&#xff0c;参考&#xff1a; Project setup proce…

放弃40k月薪的程序员工作,选择公务员,我来分享一下看法

我有一个朋友&#xff0c;拒绝了我为他提供的4万薪水的工作&#xff0c;去了一个体制内的银行&#xff0c;做程序员&#xff0c;即使薪水减半。他之前在北京一家大公司做程序员&#xff0c;一个月30k。当我开始创业时&#xff0c;我拉他来和我一起干&#xff0c;但那时我们太小…

干货 | 思维转变之如何成为一个快速学习者!!!

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐&#xff5e; 在信息爆炸的今天&#xff0c;网络上有各种资源&#xff0c;其实有心想要学习&#xff0c;都可以学到。 但是&#xff0c;其实自我学习的过程还是比较艰难&#xff0c;那么是否…

人员管理KPI和OKR

文章目录 人员管理KPI和PI一、关键绩效指标概述&#xff08;一&#xff09;关键绩效指标的内涵&#xff08;二&#xff09;关键绩效指标的类型&#xff08;三&#xff09;基于关键绩效指标的绩效指标体系 二、关键绩效指标库三、指标权重与员工责任 OKR360 环评3P汇报法 人员管…

只使用位运算实现加减乘除

在线OJ: LeetCode 29. 两数相除 原题目的要求是不能使用乘法, 除法和取余运算符实现除法. 在本篇博客中把题目要求提高一点, 这里只使用位运算来实现, 顺便的也就把只使用位运算实现加减乘除实现了. 1 . 实现加法 首先我们需要知道两数之和可以是两个数位相加和不进位相加之…