【算法】代码随想录之字符串(更新中)

news2024/11/15 12:10:46

文章目录

前言

一、反转字符串(LeetCode--344)

二、反转字符串II(LeetCode--541)

三、反转字符串中的单词(LeetCode--151)


前言

跟随代码随想录,学习字符串相关的算法题目,记录学习过程中的tips。


一、反转字符串(LeetCode--344)

【1】题目描述:

【2】解决思想:首尾指针法,交换首尾指针对应的元素,直到首尾指针相遇。

【3】C++代码:

class Solution {
public:
    void reverseString(vector<char>& s) {
        int low = 0, end = s.size() - 1;
        while (low < end) {
            char tmp = s[low];
            s[low] = s[end];
            s[end] = tmp;
            low++;
            end--;
        }
    }
};

【4】时间复杂度:O(N)

【5】空间复杂度:O(1)


二、反转字符串II(LeetCode--541)

【1】题目描述:

【2】解决思想:每次让i走2k步,立足当下的i,反转属于[i,i+k)范围内的元素,若到末尾不够k则反转全部。

【3】C++代码:

class Solution {
private:
    void reverse(string &s, int low, int high) {
        high--;
        while (low < high) {
            char tmp = s[low];
            s[low] = s[high];
            s[high] = tmp;
            low++;
            high--;
        }
    }
public:
    string reverseStr(string s, int k) {
        for (int i = 0; i < s.size(); i += 2*k) {//每次走2k
            if (i+k <= s.size()) {//反转前k个
                reverse(s, i, i+k);
            } else {//末尾反转剩余
                reverse(s, i, s.size());
            }
        }
        return s;
    }
};

【4】时间复杂度:O(N)

【5】空间复杂度:O(1)


三、反转字符串中的单词(LeetCode--151)

【1】题目描述:

【2】解决思想:首先,双指针法移除字符串中多余字符(舍弃开头和结尾,中间保留一个)。其次,反转整个字符串。最后,反转单独字符串中的单词。

【3】C++代码:

class Solution {
private:
    void reverse(string& s, int low, int high) {
        high--;
        while (low < high) {
            char tmp = s[low];
            s[low] = s[high];
            s[high] = tmp;
            low++;
            high--;
        }
    }
public:
    string reverseWords(string s) {
        //双指针移除多余空格
        int low = 0;
        for (int high = 0; high < s.size(); high++) {
            if (s[high] != ' ') {
                if (low != 0) {//单词间保留一个空格
                    s[low++] = ' ';
                }
                while (high < s.size() && s[high] != ' ') {//保留整个单词
                    s[low++] = s[high++];
                }
            }
        }
        s.resize(low);
        //整体反转(左闭右开)
        reverse(s, 0, s.size());
        //每个单词反转
        int start = 0;
        for (int i = 0; i <= s.size(); ++i) {
            if (s[i] == ' ' || i == s.size()) {
                reverse(s, start, i);
                start = i + 1;
            }
        }
        return s;
    }
};

【4】时间复杂度:O(N)

【5】空间复杂度:O(1)


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

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

相关文章

20240730 每日AI必读资讯

&#x1f3ac;燃爆&#xff01;奥运8分钟AI影片火了&#xff0c;巴赫主席&#xff1a;感谢中国黑科技 - 短片名为《永不失色的她》&#xff08;To the Greatness of HER&#xff09;&#xff0c;由阿里巴巴和国际奥委会联合推出。 - 百年奥运史上伟大女性的影响故事在此被浓缩…

VBA技术资料MF183:将图片导入word并调整大小

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

人生最大的毛病,就是一个“ 傲 ”字

99天 傲慢之害&#xff0c;人要勤勉恭敬 51.27 先生说&#xff1a;人生最大的毛病&#xff0c;就是一个“ 傲 ”字。 当今人们的问题&#xff0c;主要就是“ 傲 ”。千罪百恶&#xff0c;都从傲而来。一个人要是傲&#xff0c;就会自高自大、自以为是&#xff0c;不肯屈于人下…

cf960(div2)

A. Submission Bait&#xff08;博弈&#xff09; 题意&#xff1a;爱丽丝和鲍勃在大小为n的数组a中进行游戏&#xff0c;他们轮流进行运算&#xff0c;爱丽丝先开始&#xff0c;不能运算的一方输&#xff0c;一开始mx0&#xff0c;每次操作&#xff0c;玩家可以选择一个牵引i…

pikachu靶场之目录遍历、敏感信息泄露

一、目录遍历 漏洞概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值(比如文件名称)传递到后台&#xff0c;后台再执行其对应的文件。 在这个过…

汽车辐射大?技术来救它:整车辐射抗扰发射天线仿真建模及性能预测

摘要 针对车辆电磁辐射抗扰度测试条件要求高、预测难度大的问题&#xff0c;通过仿真软件建立电磁抗扰度测试发射天线&#xff08;简称抗扰发射天线&#xff09;模型及无车情况下的电磁抗扰试验场强环境&#xff0c;为整车电磁辐射抗扰性能的预测搭建了一个仿真平台。 验证试验…

第5章Excel数据分析之数据透视表遇见SQL

文章目录 第5章 数据透视表遇见SQL5-1如何在查询中使用SQL语句&#xff1f;5-2SQL查询语句&#xff08;数据透视表的辅助列&#xff09;5-3SQL常用运算符&#xff08;案例&#xff1a;添加分析维度&#xff09;5-4SQL筛选语句&#xff08;数据透视表数据源的过滤&#xff09;5-…

【单片机毕业设计选题24085】-基于STM32的心电采集系统设计

系统功能: 系统上电后&#xff0c;OLED显示“欢迎使用心电采集系统请稍后”两秒后进入正常页面显示。 第一行显示心率和血氧值。 第二行显示心率设定高值。 第三行显示心率设定低值。 第四行显示心率状态&#xff0c;"Rate OK", "Rate High", "R…

C++中的依赖注入

目录 1.概述 2.构造函数注入 3.setter方法注入 4.接口注入 5.依赖注入框架 6.依赖注入容器 7.依赖注入框架的工作原理 8.依赖注入的优势 9.总结 1.概述 依赖注入是一种设计模式&#xff0c;它允许我们在不直接创建对象的情况下为对象提供其依赖项&#xff1b;它通过将…

学习c语言第十四天(调试+练习)

一、调试 所有发生的事情都一定有迹可循&#xff0c;如果问心无愧&#xff0c;就不需要掩盖也就没有迹象了&#xff0c;如果问心有愧 就必然需要掩盖&#xff0c;那就一定会有迹象&#xff0c;迹象越多就越容易顺藤而上&#xff0c;这就是推理的途径。 顺着这条途径顺流而下就…

广东省某地区智慧水务平台全面升级启航(案例解析)

项目背景 随着物联网、人工智能、大数据、数字孪生等技术的应用&#xff0c;对精准调控、漏损控制、可视化管理、节能降耗、高效指挥等方面的要求越来越高。鉴于此&#xff0c;广东某地区的现有智慧水务平台已无法满足日益增长的智能化管理需求&#xff0c;亟待进行智慧化升级以…

工程计算与分析课程报告-Matlab

如下图所示的单自由度系统: m20kg, c30 Ns/m, and k3000 N/m. 1、应用数学、机械等理论知识推导出以下系统的数学模型&#xff1a; 其中&#xff1a; x坐标如上图所示&#xff0c;取其稳态点为零点。 M为重物质量 K为弹簧弹性系数 C为阻尼系数 F(t)为施加在重物上的外激励…

应用层协议HTTP

应用层协议HTTP 注1. HTTP协议2. 认识URL3. HTTP 协议请求与响应格式3.1.快速获取HTTP请求3.2 快速解析HTTP请求3.3 细致了解HTTP请求与响应 4. 完善Http.hpp代码&#xff0c;实现http协议4.1 http请求4.2再谈URL4.3构建http应答4.4 Content-Type属性 5.HTTP请求/响应属性5.1HT…

vscode+git解决远程分支合并冲突

1&#xff09;远程分支和远程分支不复杂情况合并 例如readme的冲突 可直接在github上解决 删到只剩下 #supergenius002 合并冲突测试1/合并测试冲突1合并测试冲突2/合并测试冲突2就行 《《《/》》》也要删掉 2&#xff09;但如果是复杂的冲突&#xff0c;让我们回到vscod…

glsl shader中实现canvas中的createRadialGradient效果

在网上找了好久&#xff0c;也没有发现有现成用shader去实现canvas radialGradient效果的.大部分都是简单的只有一个中心圆或者通过canvas绘制渐变再作为纹理图像进行贴图&#xff0c;没有类似像canvas有内圆与外圆&#xff0c;两圆心位置不一样&#xff0c;可以用实现类似焦点…

【开发问题记录】启动某个微服务时无法连接到seata(seata启动或配置异常)

问题记录 一、问题描述1.1 问题复现1.1.1 将Linux中的部分微服务启动1.1.2 在本地启动当时出错的服务 1.2 解决思路1.2.1 Nacos中seata相关的信息1.2.2 Linux中seata相关的信息 二、问题解决2.1 seata的配置错误2.1.1 Nacos中seata的配置问题2.1.2 命名空间问题的发现 2.2 网络…

Python数值计算(12)

本篇说说Neville方法。Neville方法的基础是&#xff0c;插值多项式可以递归的生成&#xff0c;有时进行插值的目的是为了计算某个点的值&#xff0c;这个时候并不需要将拟合曲线完全求出&#xff0c;而是可以通过递归的方式进行计算&#xff0c;具体操作如下&#xff1a; 例如…

代码实践思考:ROS1和ROS2

扩展 能否借助人工智能工具将ROS1批量转为ROS2如何更高效的进行ROS学习 ROS1大量案例直接批处理用智能工具转为ROS2案例 不同版本之间的工具软件直接用智能方式进行代码升级 例如OpenCV之类&#xff0c;一些函数变化&#xff0c;直接用智能工具进行批量代码优化 机器人画圆-…

滞回比较器工作原理,应用,TINA仿真

滞回比较器 滞回比较器的主要应用是增加滞回控制&#xff0c;让其对微小的变化不那么敏感&#xff0c;增强抗干扰能力&#xff0c;避免由噪声引起的不稳定状态&#xff0c;通常用于噪声环境下的阈值检测以及信号调理。根据不同需求&#xff0c;滞回比较器还可以设计成开漏极输出…

超级智能体创造营:启动!我的情侣匹配度测试助手

零、写在前面 听说由百度文心智能体平台主办&#xff0c;万众瞩目的 超级智能体创造营 第三期启动啦&#xff01; 在本期的创造营中&#xff0c;博主开发了一款有趣的超级智能体&#xff1a;情侣匹配度测试助手。 为什么要开发它呢&#xff0c;快来听博主娓娓道来吧~ 一、超…