一刷代码随想录——字符串

news2024/12/23 13:01:39

1 力扣344.反转字符串

题目描述:

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

class Solution {
public:
    void reverseString(vector<char>& s) {
        char tmp;
        for (int i = 0, j = s.size() - 1; i < s.size() / 2; i++, j--) {
            tmp = s[i];
            s[i] = s[j];
            s[j] = tmp;
        }
    }
};

2 力扣541. 反转字符串II

题目描述:

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。

如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

class Solution {
public:
    string reverseStr(string s, int k) {
        int i = 0;
        while (i + 2 * k < s.size() && s.size() > 2 * k) {
            reverse(s.begin() + i, s.begin() + i + k);
            i += 2 * k;
        }
        if (s.size() - i < k) reverse(s.begin() + i, s.begin() + s.size());
        else reverse(s.begin() + i, s.begin() + i + k);
        return s;
    }
};

3 力扣151.翻转字符串里的单词

题目描述:

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

class Solution {
public:
    string reverseWords(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);
//反转单词
        reverse(s.begin(), s.end());
        int sl = 0, f = 0;
        for (; f < s.size(); f++) {
            if (s[f] != ' ') continue;
            reverse(s.begin() + sl, s.begin() + f);
            sl = f + 1;
        }
        reverse(s.begin() + sl, s.end());
        return s;
    }
};

空格剪枝

先总体反转s的每个元素,再分别反转每个单词的字母,可以实现单词反转

4 力扣459.重复的子字符串

题目描述:

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

掐头去尾判断是否还有子串

class Solution {
public:
    bool repeatedSubstringPattern(string s) {
        string t = s + s;
        t.erase(t.begin()); t.erase(t.end() - 1);
        if (t.find(s) != std::string::npos) return true; 
        return false;
    }
};

KMP:

5 力扣剑指Offer 05.替换空格

题目描述:

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

class Solution {
public:
    string replaceSpace(string s) {        
        int t = s.size() - 1;
        int cnt = 0;
        for (int i = 0; i <= t; ++i) {
            if (s[i] == ' ') cnt++;
        }
        if (!cnt) return s;
        s.resize(t + 1 + cnt * 2);
        int p = s.size()-1;
//while(t<p)很重要
        while(t<p){
            if (s[t] != ' ') s[p--] = s[t--];
            else {
                s[p - 2] = '%';
                s[p - 1] = '2';
                s[p] = '0';
                p -= 3;
                --t;
            }
        }
        return s;
    }
};

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

题目描述:

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        reverse(s.begin(), s.begin() + n);
        reverse(s.begin() + n, s.end());
        reverse(s.begin(), s.end());
        return s;
    }
};

7.KMP

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

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

相关文章

数据库原理与应用-关系数据库

关系数据结构及形式化定义关系操作关系的完整性关系代数关系演算

WebSocket协议简介

一、WebSocket协议是什么 WebSocket是基于TCP的应用层协议&#xff0c;用于在C/S架构的应用中实现双向通信&#xff0c;它实现了浏览器与服务器全双工(full-duplex)通信&#xff0c;也就是允许服务器主动发送信息给客户端。 WebSocket 协议主要为了解决基于 HTTP/1.x 的 Web …

【正点原子Linux连载】第一章 VMware虚拟机安装 摘自【正点原子】ATK-DLRV1126系统开发手册

1&#xff09;实验平台&#xff1a;正点原子RV1126 Linux开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692176265749 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第一章 V…

flex布局常用属性记录

场景&#xff1a;前端常用的页面布局当使用 flex 布局时&#xff0c;首先想到的是两根轴线 — 主轴和交叉轴。主轴由flex-direction 定义&#xff0c;另一根轴垂直于它。我们使用 flexbox 的所有属性都跟这两根轴线有关&#xff1b;这里只做主轴的介绍&#xff1a;主轴主轴由 f…

算法刷题-四数之和、缺失的第一个正数、N 皇后

文章目录四数之和缺失的第一个正数N 皇后四数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target&#xff0c;判断 nums 中是否存在四个元素 a&#xff0c;b&#xff0c;c 和 d &#xff0c;使得 a b c d 的值与 target 相等&#xff1f;找出所有满足条件且不重复…

【基础篇】6 # 栈:如何实现浏览器的前进和后退功能?

说明 【数据结构与算法之美】专栏学习笔记 什么是栈&#xff1f; 栈是一种“操作受限”的线性表&#xff0c;只允许在一端插入和删除数据&#xff0c;其特性就是后进先出、先进后出。 栈既可以用数组来实现&#xff0c;也可以用链表来实现。 用数组实现的栈叫作顺序栈用链…

【正点原子Linux连载】第三章 RV1126开发环境搭建 摘自【正点原子】ATK-DLRV1126系统开发手册

1&#xff09;实验平台&#xff1a;正点原子RV1126 Linux开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692176265749 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第三章 R…

Gartner发布2022云Web应用程序和API保护魔力象限

8月30日&#xff0c;知名咨询机构Gartner发布2022云Web应用程序和API保护魔力象限。当前&#xff0c;云Web应用程序和API保护市场迅速增长。 Gartner预测&#xff0c;到 2024 年&#xff0c;70%实施多云战略的企业将青睐云 Web 应用程序和API保护平台 &#xff08;WAAP&#x…

26岁从财务转行软件测试,4年沉淀我已经是25k的测开工程师...

此文绝对不是喂鸡汤&#xff0c;而是告诉你实实在在的转行办法。有点长&#xff0c;请细看有些人会轻松上岸。有些人会挣扎着上岸。有些人会淹死在水里。我属于挣扎着上岸的。我原来是做财务方面的&#xff0c;后面自学转行做了软测程序员&#xff0c;从事软件测试工作4年&…

SpringMVC之简介

看到SpringMVC这个名字我们会发现其中包含Spring,那么SpringMVC和Spring之间的会有关系么?答案是肯定有&#xff0c;SpringMVC隶属于Spring&#xff0c;是Spring技术中的一部分。那么SpringMVC到底是用来做什么的呢? 回想web阶段&#xff0c;我们学习过Servlet,而SpringMVC与…

Atlas中间件快速入门(实现数据库读写分离)

一、Atlas简介 1 2 3 41. Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目 2. 它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上&#xff0c;修改了大量bug&#xff0c;添加了很多功能特性 3. 目前该项目在360公司内部得到了广泛应…

屏幕录制没有声音怎么办?看看你有没有打开这个设置

电脑是我们学习和办公不可或缺的工具&#xff0c;有时我们需要使用工具对电脑屏幕进行录制。但很多小伙伴录制的电脑录屏文件只有画面没有声音。屏幕录制没有声音怎么办&#xff1f;不用慌&#xff01;有可能你只是忘了在录制前打开这个设置。今天小编就来教大家录制前需要开启…

公司企业如何制作微信小程序店铺?

​微信小程序除了可以为公司企业充当展示官网之外&#xff0c;有些主打线上销售商品的公司企业也会借助小程序来卖货&#xff0c;那就是我们常说的微信小程序店铺。那么公司企业如何制作微信小程序店铺&#xff1f;下面给大家做个讲解。 一、注册小程序账号 微信小程序店铺也属…

有效管理 Kubernetes 的流行解决方案,7 款 DevOps 工具管理 Kubernetes ,集群管理更加的轻松顺畅和高效

有效管理 Kubernetes 的流行解决方案&#xff0c;7 款 DevOps 工具管理 Kubernetes &#xff0c;集群管理更加的轻松顺畅和高效。 在新兴的云原生环境中&#xff0c;Kubernetes无处不在。它已成为编排容器的标准。但是&#xff0c;管理多个 Kubernetes 集群&#xff08;必须以…

前端整理 —— 前端安全

1. XSS&#xff08;跨站脚本攻击&#xff09; 什么是XSS 是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本&#xff0c;使之在用户的浏览器上运行。利用这些恶意脚本&#xff0c;攻击者可获取用户的敏感信息如Cookie、SessionID等&#xff0c;进而危害数据安全常见类型…

【并发编程十四】c++原子操作(2)——实现自旋锁

【并发编程十四】c原子操作&#xff08;2&#xff09;——实现自旋锁一、自旋锁简介二、使用自旋锁三、不使用自旋锁四、分析简介 在介绍完原子操作&#xff0c;我们这篇使用c提供的原子操作&#xff0c;实现一个自旋锁&#xff0c;并加以利用。 原子操作参见【并发编程十三】…

什么是shell?shell在Linux内怎么编写脚本?

目录 一、概念 二、简单创建脚本 三、shell语法 1.变量 2.环境变量 3.参数变量 4.条件 5.控制结构 if语句 elif语句 for语句 一、概念 什么是shell? shell是一个作为用户与Linux系统间接口的程序&#xff0c;它允许用户向操作系统输入需要执行的命令。 下图显示了sh…

kali之setoolkit使用

kali之setoolkit使用 1 搭建钓鱼网站 钓鱼网站是黑客常用的用于盗取目标用户名与账号的方式&#xff0c;今天主要介绍setoolkit来制作钓鱼网站 setoolkit是kali下的社会工程学工具集。 ①进入setoolkit 命令行输入&#xff1a; setoolkit②选择社会工程学攻击 - 网络攻击 - …

基于Android的二手车交易系统

需求信息&#xff1a; 1、登录功能:用户可以注册登录&#xff0c;管理员可以给销售人员权限&#xff0c;所以销售人员只能登陆。 2、维护车辆信息:主要实现的是客户添加修改查询删除车辆信息&#xff0c;然后发布车辆需要提交&#xff0c;提交给管理员&#xff0c;管理员审核了…

四、Executor执行器【无标题】

Executor Executor 接口定义了数据库操作的基本方法&#xff0c;其中 query*() 方法、update() 方法、flushStatement() 方法是执行 SQL 语句的基础方法&#xff0c;commit() 方法、rollback() 方法以及 getTransaction() 方法与事务的提交/回滚相关&#xff0c;clearLocalCac…