数据结构——字符串

1.leetcode 151 

题目链接: 

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/reverse-words-in-a-string/题目评价:极好的字符串题目,考察逆转、删除空格,解法多次使用了双指针法

class Solution {
public://逆转字符串s中起始l到末尾r的子串void reverse(string& s,int l,int r){char tmp = 0;while (l < r){tmp = s[l];s[l] = s[r];s[r] = tmp;l++; r--;}}/* 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。*/string reverseWords(string s) {//先清除空格,再总体逆转整个字符串,再逐个逆转每个单词removeBlanks(s);reverse(s, 0, s.length()-1);reverseEachWord(s);return s;}//删除前置后置空格,以及单词间冗杂的空格,时间复杂度为O(n)void removeBlanks(string& s){//erase时间复杂度为O(n),遍历+erase时间复杂度为O(n^2),采用双指针法时间复杂度为O(n)int slow=0;  //慢指针指向新字符串元素int fast=0;  //快指针遍历字符串for (fast = 0; fast < s.length(); fast++){//有两类字符:字母-下个字母->放字母,字母-空格->放字母+空格if (s[fast] != ' '){if (fast == s.length() - 1 || s[fast + 1] != ' ')s[slow++] = s[fast];else{s[slow++] = s[fast];s[slow++] = ' ';}}}//除末尾多余空格if (s[slow - 1] == ' ') slow--;s.resize(slow);  //slow指示新字符串的大小}//在删除空格的基础上,实现每个单词逆转,核心是判断单词的开头与结尾,单词开头要么是第一个字符要么是空格之后的第一个字符//单词的结尾要么是最后一个字符,要么是空格后的第一个字符void reverseEachWord(string& s){int l = 0, r = 0;for (int r = 0; r <= s.length(); r++){if (s[r] == ' '||r==s.length()){reverse(s, l, r - 1);l = r + 1;}}}
};

2. 替换数字(第八期模拟笔试)

时间限制:1.000S  空间限制:128MB

题目描述

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

输入描述

输入一个字符串 s,s 仅包含小写字母和数字字符。

输出描述

打印一个新的字符串,其中每个数字字符都被替换为了number

输入示例

a1b2c3

输出示例

anumberbnumbercnumber

提示信息

数据范围:
1 <= s.length < 10000。

class solution {
public:string convert(string & s){//1.识别数字,扩容[number6位扣除数字1位]int i = 0;while (i<s.length()){if (s[i] >= '0' && s[i] <= '9'){int pi = s.length() - 1;//1.识别数字,扩容[number6位扣除数字1位],记录需要移动的次数int move = s.length()-1 - i;s.resize(s.length() + 5);//2.双指针,分别指向新老字符串的末尾,把待转化数字后面的字符搬到字符串尾部int pj = s.length() - 1;while (move--){s[pj] = s[pi];pj--;pi--;}//3.放进numberstring tmp = "rebmun";for (int i = 0; i < 6; i++)s[pj - i] = tmp[i];//4.移动ii += 6;}else i++;}return s;}
};

3. 右旋字符串(第八期模拟笔试)

时间限制:1.000S  空间限制:128MB

题目描述

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。 

例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。

输入描述

输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。

输出描述

输出共一行,为进行了右旋转操作后的字符串。

输入示例

2
abcdefg

输出示例

fgabcde

提示信息

数据范围:
1 <= k < 10000,
1 <= s.length < 10000

class solution {
public:void Reverse(string& s, int i, int j){char c = 0;while (i < j){c = s[i];s[i] = s[j];s[j] = c;i++;j--;}}string RightReverse(string& s,int k){//先局部翻转,再总体翻转 原理表示如:A1B1A2B2->B1A1B2A2->A2B2A1B1int len = s.length();Reverse(s, 0, len - k - 1);Reverse(s, len - k, len - 1);Reverse(s, 0, len - 1);return s;}
};

4. KMP算法

//实现字符串的匹配(即在文本串中寻找模式串子串)
class KMP {int* next; //next数组含义:next[i]记录前i字符构成的子串中最长公共前后缀,指示模式串与文本串不匹配时模式串下一个比较字符
public:int KMP_Match(string s1 = "", string s2 = " "){int* next = new int[s2.length()];getNext(s2, next);int i = 0, j = 0; //i遍历文本串,j遍历模式串for (int i = 0; i < s1.length(); i++){while (j > 0 && s1[i] != s2[j]) {j = next[j - 1];}if (s1[i] == s2[j]) j++;if (j == s2.length())  //匹配{return i + 1 - s2.length();}}return -1;};void getNext(string s,int* next){//i:前缀尾,j:后缀尾,注意 i指示当前最长公共前后缀的长度!!!//初始化if (!next)  next = new int[s.length()];next[0] = 0;  //next数组第一个位置设为0int i = 0, j;for ( j = 1; j < s.length(); j++){//前后缀不匹配,循环前缀尾取上一个next的值,直至前后缀匹配或前缀到头while(i>0&&s[i]!=s[j])i = next[i - 1];  //前后缀匹配if (s[i] == s[j])i++; //公共前后缀长度加一next[j]=i;//更新next数组}}
};

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

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

相关文章

C++:基类中的函数什么情况下声明为虚函数

在C中&#xff0c;基类中的函数应该在以下情况下声明为虚函数&#xff1a; 实现多态行为&#xff1a;如果你希望通过基类指针或引用来调用派生类中的重写函数&#xff0c;那么基类中的这个函数应该被声明为虚函数。这是实现运行时多态性的一种方式。 允许派生类重写&#xff1…

体验OceanBase OBD V2.5.0 组件内扩容和组件变更

背景 OBD 是OceanBase的命令行部署工具&#xff0c;在 obd V2.5.0 版本之前&#xff0c;其主要功能主要是部署各类组件&#xff0c;例如 oceanbase-ce,obproxy-ce,obagent 等。然而&#xff0c;它并不支持组件的变更操作以及组件内部的扩缩容调整。具体来说&#xff1a; 1、若…

C语言经典面试题目(八)

1、什么是文件指针&#xff1f;请解释文件指针的作用。 文件指针是在C语言中用来指向文件的指针变量。它主要用于对文件进行读写操作&#xff0c;通过文件指针可以控制文件的读写位置、读取文件内容、向文件中写入数据等操作。 文件指针的作用&#xff1a; 打开文件&#xff…

网络层_IP

传输层解决的是传输控制&#xff0c;而实际真正决定数据能否发送到对端的是网络层。网络层是有概率传输&#xff0c;而传输层是可靠性传输。所以传输层网络层就可以做到将数据可靠发送到对端。网络层的常见协议有&#xff1a;IP、ICMP等&#xff0c;其中最重要的是IP协议&#…

Flutter 的 switch 语句补遗

我的 App 里&#xff0c;一个消息气泡变成空白了&#xff0c;非常奇怪&#xff0c;此前一直是没问题的&#xff0c;经过调试定位我发现&#xff1a; static TextSpan _buildRootSpan(BuildContext ctx, List<LinkifyElement> parts, TextStyle? style) {List<InlineS…

STM32F103 CubeMX 使用USB生成鼠标设备

STM32F103 CubeMX 使用USB生成鼠标设备 1 配置cubeMX1.1配置外部晶振&#xff0c;配置debug口1.2 配置USB1.3 配置芯片的时钟1.4 生成工程 2. 编写代码2.1 添加申明2.2 main函数代码 1 配置cubeMX 1.1配置外部晶振&#xff0c;配置debug口 1.2 配置USB 1.3 配置芯片的时钟 需…

云与云计算:从传统到云端的IT资源变革

云&#xff1a;从分散到集约&#xff0c;资源服务化的新模式 让我们先通过一个生活化的场景来理解“云”这一概念。几十年前&#xff0c;诸如农村地区的居民需要自给自足&#xff0c;比如在自家院子里打井取水&#xff0c;冬季烧煤取暖&#xff0c;一切满足自己生活需要的都要…

vscode中C++调试launch.json配置

.vscode目录下&#xff0c; launch.json内容&#xff0c; {"version": "0.2.0","configurations": [{"name": "cc","type": "cppdbg","request": "launch","preLaunchTask&…

html和winform webBrowser控件交互并播放视频(包含转码)

1、 为了使网页能够与winform交互 将com的可访问性设置为真 [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name "FullTrust")][System.Runtime.InteropServices.ComVisibleAttribute(true)] 2、在webBrow…

idea+vim+pycharm的块选择快捷键

平时开发的时候&#xff0c;有的时候我们想用矩形框住代码&#xff0c;或者想在某列上插入相同字符 例如下图所示&#xff0c;我想在22-24行的前面插入0000 1. Idea的快捷键&#xff1a;option 鼠标 2. Pycharm的快捷键&#xff1a;shift option 鼠标 2. Vim 块选择 v/V/c…

spy分析文件另存为弹框【selenium】

有时需要下载多个文件&#xff0c;但是不想保存在同一个目录下&#xff0c;需要做两步 selenium设置浏览器默认下载路径&#xff0c;这个路径需要是个不存在的路径操作文件另存为弹框 文章目录 selenium设置浏览器默认下载路径操作文件另存为弹框 selenium设置浏览器默认下载路…

云计算与低代码:重塑软件开发的新范式

随着信息技术的迅猛发展&#xff0c;云计算与低代码已成为引领软件开发领域变革的重要力量。本文将对这两个主题进行深入探讨&#xff0c;分析它们如何重塑软件开发的模式&#xff0c;提高开发效率&#xff0c;以及对企业和开发者带来的深远影响。 云计算 无限可能的新天地 云…

Java 内存异常

内存溢出 内存溢出指的是在程序执行过程中&#xff0c;申请的内存超过了系统实际可用的内存资源。 内存溢出的常见情况&#xff1a; 创建大量对象并持有引用&#xff1a;在程序中创建大量对象并持有对这些对象的引用&#xff0c;而没有及时释放这些引用&#xff0c;导致堆内存…

Github和TeamCity的持续集成构建

一、简介 TeamCity是JetBrains旗下的一款持续集成[Continuous Integration&#xff0c;简称CI]工具&#xff0c;开箱即用。TeamCity提供一系列特性可以让团队快速实现持续集成&#xff1a;IDE工具集成、各种消息通知、各种报表、项目的管理、分布式的编译等等。 二、安装使用(…

Excel xlsx file:not supported

报错信息&#xff1a; 原因&#xff1a; Excel和xlrd版本不匹配 解决措施&#xff1a; 降低xlrd版本或Excel版本 方法一&#xff1a; 1) 先卸载了原来的版本&#xff1a;uninstal xlrd 2) 安装新的低版本xlrd模块pip install xlrd1.2.0 方法二&#xff1a; 1&#xff09…

怎么修改游戏ip地址

玩游戏时IP被封是一件非常苦恼的事情&#xff0c;为了避免玩游戏时IP被封&#xff0c;就得遵守游戏规则&#xff0c;但想要多开账号玩&#xff0c;就会被限制&#xff0c;想要不被封IP&#xff0c;就得更换IP地址玩游戏&#xff0c;不同的账号使用不同的IP&#xff0c;就能避免…

AI日报:欧盟人工智能法案通过后行业面临合规障碍

文章目录 人工智能新规对web爬网的影响对英国的影响。 人工智能新规 立法者已经通过了欧盟人工智能法案。企业现在必须确保其人工智能应用程序符合规则。 全面的新规定对可能影响公民权利的人工智能系统实施制裁&#xff0c;并有可能彻底禁止某些系统。 违反规定的公司可能面…

【类和对象】类的作用域 | 类的实例化 | 类对象模型 | this指针

目录 5.类的作用域 6.类的实例化 6.1成员的声明和定义 6.2实例化出的对象大小 7.类对象模型❗❗ 7.1如何计算类对象的大小 7.2类对象的存储方式猜测 7.3结构体内存对齐规则 7.3.1内存对齐 7.3.2大小端 8.this指针 8.1this指针的引出 8.2this指针的特性 C和C实…

http的body格式

body数据都通常放在 HTTP 请求的 body 部分。 在 HTTP 请求中&#xff0c;Content-Type 头用于指示 body 中的数据格式。例如&#xff0c;对于 x-www-form-urlencoded 格式的数据&#xff0c;通常会设置 Content-Type: application/x-www-form-urlencoded&#xff0c;而对于 fo…

MySQL—redo log、undo log以及MVCC

MySQL—redo log、undo log以及MVCC 首先回忆一下MySQL事务的四大特性&#xff1a;ACID&#xff0c;即原子性、一致性、隔离性和持久性。其中原子性、一致性、持久性实际上是由InnoDB中的两份日志保证的&#xff0c;一份是redo log日志&#xff0c;一份是undo log日志&#xff…