代码随想录-字符串01 344.反转字符串541. 反转字符串II替换空格翻转字符串里的单词左旋转字符串

题目目录

● 344.反转字符串
● 541. 反转字符串II
● 剑指Offer 05.替换空格
● 151.翻转字符串里的单词
● 剑指Offer58-II.左旋转字符串

344.反转字符串

344.反转字符串
很经典的字符串考察点,考察对双指针的熟悉程度。
解法是通过双指针从字符串数组两边向中间靠拢,交换字符。

void reverseString(vector<char>& s)
{
    int left = 0;
    int right = s.size() - 1;
    while (left < right) {
        char tmp = s[left];
        s[left] = s[right];
        s[right] = tmp;

        left++;
        right--;
    }
}

541. 反转字符串II

541. 反转字符串II
题目描述
解题的思路比上一题复杂一点,但是思路还是一样的,不同之处在于外层多了循环。

string reverseStringII(string s, int k)
{
    int strLen = s.size();
    int leftLen = strLen;
    while (leftLen > 0) {
        int left = strLen - leftLen;
        int right = left + k -1;
        if (leftLen < k) {
            right = strLen - 1;
        }
        while (left < right) {
            char tmp = s[left];
            s[left] = s[right];
            s[right] = tmp;

            left++;
            right--;
        }
        leftLen = leftLen - 2 * k;
    }

    return s;
}

剑指Offer 05.替换空格

剑指Offer 05.替换空格
在这里插入图片描述
主要思路是先统计空格个数,对数组扩容,利用双指针从数组尾部往前填充

string replaceBlackChar(string s)
{
    // 获取空格个数
    int spaceCount = 0;
    for (int i = 0; i < s.size(); ++i) {
        if (s[i] == ' ')
            spaceCount++;
    }
    int strLen = s.size();
    // 扩容
    s.resize(strLen + spaceCount * 2);
    // 双指针移动
    int left = strLen - 1;
    int right = s.size() - 1;

    while (left >= 0) {
        if (s[left] == ' ')
        {
            s[right--] = '0';
            s[right--] = '2';
            s[right--] = '%';
        } else {
            s[right--] = s[left];
        }
        left--;
    }
    return s;
}

151.翻转字符串里的单词

151.翻转字符串里的单词
在这里插入图片描述
思路是找到空格,分割单词,然后填充到str
O(n + n) 空间 O(n)

string reverseWord(string str)
{
    vector<string> vec;

    int index = 0;
    int ret = 0;
    while ((ret = str.find(' ', index)) != str.npos) {
        vec.push_back(str.substr(index, ret - index));
        index = ret + 1;
    }
    index = str.size() - 1;
    for (auto val : vec) {
        for (auto i = val.size() - 1; i >= 0; --i) {
            str[index--] = val[i];
        }
        if (index > 0)
            str[index--] = ' ';
    }
    return str;
}

上面的解法使用到了O(n)的额外空间及substr字符串函数,尽量别使用库函数来实现。
下面是高效解法:

// 思路:
// 删除多余空格
// 从后往前移动,覆盖掉多余空格
// 就是数组元素删除操作
string removeExtraSpace(string s)
{
    int slow = 0;
    for (int i = 0; i < s.size(); ++i) {
        if (s[i] != ' ') {
            if (slow != 0) s[slow++] = ' ';
            while (i < s.size() && s[i] != ' ') {
                s[slow++] = s[i++];
            }
        }
    }
    s.resize(slow);
    return s;
}

//
string reverseWord2(string s)
{
    // 去除多余空格
    s = removeExtraSpace(s);
    // 反转
	int left = 0;
    int right = s.size() - 1;
	while (left < right) {
        char ch = s[left];
        s[left++] = s[right];
        s[right--] = ch;
	}
    // 单词反转
	left = 0;
    while (left < s.size()) {
		right = left + 1;
        while (right < s.size() && s[right] != ' ')
			right++;
		int tmp = right;
        right -= 1;
        while (left < right) {
            char ch = s[left];
            s[left++] = s[right];
            s[right--] = ch;
		}
		
		left = tmp + 1;
	}
    return s;
}

剑指Offer58-II.左旋转字符串

剑指Offer58-II.左旋转字符串
在这里插入图片描述

//
string leftReverseString(string s, int n)
{
    // 整体反转
    int left  = 0;
    int right = s.size() - 1;
    while (left < right) {
        char ch = s[left];
        s[left++] = s[right];
        s[right--] = ch;
    }
    // 最后n个字符反转
    left = s.size() - n;
    right = s.size() - 1;
    while (left < right) {
        char ch = s[left];
        s[left++] = s[right];
        s[right--] = ch;
    }
    // 剩下字符反转
    left = 0;
    right = s.size() - n - 1;
    while (left < right) {
        char ch = s[left];
        s[left++] = s[right];
        s[right--] = ch;
    }

    return s;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ajax-axios-url-form-serialize 插件

AJAX AJAX 概念 1.什么是 AJAX ? mdn 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中&#xff0c;使用 AJAX技术&#xff08;XHR对象&#xff09;发起获取省份列表数据的请求&#xff0c;服务器代码响应准备好的省份列表数据给前端&#xff0c;前端拿到数据数…

Vue3 setup中使用$refs

在 Vue 3 中的 Composition API 中&#xff0c;$refs 并不直接可用于 setup 函数。这是因为 $refs 是 Vue 2 的实例属性&#xff0c;而在 Vue 3 中&#xff0c;setup 函数是与模板实例分离的&#xff0c;不再使用实例属性。 实际工作中确实有需求&#xff0c;在setup 函数使用…

windows服务器下java程序健康检测及假死崩溃后自动重启应用、开机自动启动

前两天由于项目需要&#xff0c;一个windows上的批处理任务&#xff08;kitchen.bat&#xff09;&#xff0c;需要接到mq的消息通知后执行&#xff0c;为了快速实现这里我们通过springboot写了一个jar程序&#xff0c;用于接收mq的消息&#xff0c;并调用bat文件。 本程序需要实…

MFC140.dll缺失的修复方法,安装MFC140.dll文件

大家好&#xff0c;今天我要和大家分享的是如何正确安装和使用MFC140.dll。MFC140.dll是一种常见的动态链接库文件&#xff0c;它是Microsoft Foundation Classes(MFC)的一部分&#xff0c;被广泛应用于Windows操作系统中的各种应用程序中。在本文中&#xff0c;我们将详细介绍…

Debian10: 安装nut服务器(UPS)

UPS说明&#xff1a; UPS的作用就不必讲了&#xff0c;我选择是SANTAKTGBOX-850&#xff0c;规格为 850VA/510W&#xff0c;可以满足所需&#xff0c;关键是Debian10自带了驱动可以支持&#xff0c;免去安装驱动&#xff0c;将UPS通过USB线连接服务器即可&#xff0c;如下图所示…

大模型基础02:GPT家族与提示学习

大模型基础&#xff1a;GPT 家族与提示学习 从 GPT-1 到 GPT-3.5 GPT(Generative Pre-trained Transformer)是 Google 于2018年提出的一种基于 Transformer 的预训练语言模型。它标志着自然语言处理领域从 RNN 时代进入 Transformer 时代。GPT 的发展历史和技术特点如下: GP…

Java 日期格式(yyyy-MM-dd HH:mm:ss SSS)

常用格式为&#xff1a;yyyy-MM-dd HH:mm:ss 以 2019-12-31 06:07:59:666 时间为例&#xff1a; 字符 含义 Example y&#xff08;小写的y&#xff09; 年 yyyy---->2019 M&#xff08;大写的M&#xff09; 月 MM---->12 d&#xff08;小写的d&#xff09; 一…

论文笔记 Graph Attention Networks

2018 ICLR 1 intro 1.1. GCN的不足 无法完成inductive任务 inductive任务是指&#xff1a; 训练阶段与测试阶段需要处理的graph不同。通常是训练阶段只是在子图上进行&#xff0c;测试阶段需要处理未知的顶点。GGN 的参数依赖于邻接矩阵A/拉普拉斯矩阵L&#xff0c;所以换了…

DTC 19服务学习1

在UDS&#xff08;统一诊断服务&#xff09;协议中&#xff0c;0x19是用于DTC&#xff08;诊断故障代码&#xff09;信息的服务。以下是你提到的子服务的功能和作用&#xff1a; 0x01 - 报告DTC按状态掩码。这个子服务用于获取当前存储在ECU中的DTC列表。状态掩码用于过滤DTC&a…

【Mariadb高可用MHA】

目录 一、概述 1.概念 2.组成 3.特点 4.工作原理 二、案例介绍 1.192.168.42.3 2.192.168.42.4 3.192.168.42.5 4.192.168.42.6 三、实际构建MHA 1.ssh免密登录 1.1 所有节点配置hosts 1.2 192.168.42.3 1.3 192.168.42.4 1.4 192.168.42.5 1.5 192.168.42.6 …

听GPT 讲Prometheus源代码--rules

Prometheus的rules目录主要包含规则引擎和管理规则的文件: engine.go 该文件定义了规则引擎的接口和主要结构,包括Rule,Record,RuleGroup等。它提供了规则的加载、匹配、评估和结果记录的功能。 api.go 定义了用于管理和查询规则的RESTful API,包括获取、添加、删除规则等方法。…

中大型无人机远程VHF语音电台系统方案

方案背景 中大型无人机在执行飞行任务时&#xff0c;特别是在管制空域飞行时地面航管人员需要通过语音与无人机通信。按《无人驾驶航空器飞行管理暂行条例》规定&#xff0c;中大型无人机应当进行适航管理。物流无人机和载人eVTOL都将进行适航管理&#xff0c;所以无人机也要有…

计算机组成与设计 Patterson Hennessy 笔记(二)MIPS 指令集

计算机的语言&#xff1a;汇编指令集 也就是指令集。本书主要介绍 MIPS 指令集。 汇编指令 算数运算&#xff1a; add a,b,c # abc sub a,b,c # ab-cMIPS 汇编的注释是 # 号。 由于MIPS中寄存器大小32位&#xff0c;是基本访问单位&#xff0c;因此也被称为一个字 word。M…

AI搜索引擎助力科学家创新

开发者希望通过帮助科学家从大量文献中发现联系从而解放科学家&#xff0c;让他们专注于发现和创新。 图片来源&#xff1a;The Project Twins 对于专注于历史的研究者Mushtaq Bilal来说&#xff0c;他在未来科技中投入了大量时间。 Bilal在丹麦南部大学&#xff08; Universit…

SpringBoot + Vue 前后端分离项目 微人事(九)

职位管理后端接口设计 在controller包里面新建system包&#xff0c;再在system包里面新建basic包&#xff0c;再在basic包里面创建PositionController类&#xff0c;在定义PositionController类的接口的时候&#xff0c;一定要与数据库的menu中的url地址到一致&#xff0c;不然…

[python爬虫] 爬取图片无法打开或已损坏的简单探讨

本文主要针对python使用urlretrieve或urlopen下载百度、搜狗、googto&#xff08;谷歌镜像&#xff09;等图片时&#xff0c;出现"无法打开图片或已损坏"的问题&#xff0c;作者对它进行简单的探讨。同时&#xff0c;作者将进一步帮你巩固selenium自动化操作和urllib…

部署工业物联网可以选择哪些通信方案?

部署工业物联网有诸多意义&#xff0c;诸如提升生产效率&#xff0c;降低管理成本&#xff0c;保障生产品质稳定&#xff0c;应对长期从业劳动力变化趋势等。针对不同行业、场景&#xff0c;工业物联网需要选择不同的通信方案&#xff0c;以达到成本和效益的最佳平衡。本篇就简…

《HeadFirst设计模式(第二版)》第十章代码——状态模式

如下图所示&#xff0c;这是一个糖果机的状态机图&#xff0c;要求使用代码实现&#xff1a; 初始版本&#xff1a; package Chapter10_StatePattern.Origin;/*** Author 竹心* Date 2023/8/19**/public class GumballMachine {final static int SOLD_OUT 0;final static int…

Python学习笔记_进阶篇(二)_django知识(一)

本章简介&#xff1a; Django 简介Django 基本配置Django urlDjango viewDjango 模板语言Django Form Django 简介 Django是一个开放源代码的Web应用框架&#xff0c;由Python写成。采用了MVC的软件设计模式&#xff0c;即模型M&#xff0c;视图V和控制器C。它最初是被开发来…

攻防世界-PHP2

原题 解题思路 这题需要查看页面的phps文件&#xff08;这玩意从没见过&#xff09;。phps的文件是存放php的源代码的&#xff0c;但是不是所有网站都有。 只要让传入的idadmin就可以得到key了。 但是直接传入admin不行。用burp编码。 结果还是不行&#xff1a; 那就再…