代码随想录之字符串刷题总结
目录
1.反转字符串
2.反转字符串II
3.替换数字
4.翻转字符串里面的单词
5.右旋&&左旋字符串
1.反转字符串
题目描述:
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:["h","e","l","l","o"]
输出:["o","l","l","e","h"]
示例 2:
输入:["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
思路:
使用双指针法
对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。
注意:
注意i的限定范围
代码:
class Solution {
public:void reverseString(vector<char>& s) {int start = 0;int end = s.size() - 1;for (int i = start, j = end; i < s.size()/2; i++, j--) {swap(s[i], s[j]);}}
};
2.反转字符串II
题目描述:
给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
思路:
分成两部分进行处理:
1.每计数到2k个字符,或者剩余字符小于2k但是大于等于k个,就反转前k个字符
2.剩余字符少于k个,反转剩余字符
注意:
reverse接受的是迭代器参数,表示要反转的范围,接受的参数是字符串的起始位置和结束位置
代码:
/*库函数reverse的版本*/
class Solution {
public:/*reverse可以写为如下*/void reverse(string& s, int start, int end) {//接收数组s,起始元素和终止元素for (int i = start, j = end; i < j; i++, j--) {swap[s[i], s[j]];}}string reverseStr(string s, int k) {for (int i = 0; i < s.size(); i += (2 * k)) {//1.每隔2k个字符的前k个字符进行反转//2.剩余字符小于2k但是大于或者等于k个,则反转前面k个字符/*使用自定义的reverse函数的情况下*/if (i + k <= s.size()) {reverse(s, i, i + k - 1);continue;}else {//剩余字符少于k个,则将剩余字符全部反转reverse(s, i, s.size() - 1);}/*使用系统自带的库函数的情况下*/if(i+k<=s.size()){reverse(s.begin()+i,s.begin()+i+k);//reverse函数,接受两个迭代器参数,表示要反转的范围,接受的参数是字符串的起始位置和结束位置}else {reverse(s.begin()+i,s.end());}}return s;}
};
3.替换数字
题目描述:
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。
例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。
对于输入字符串 "a5b",函数应该将其转换为 "anumberb"
输入:一个字符串 s,s 仅包含小写字母和数字字符。
输出:打印一个新的字符串,其中每个数字字符都被替换为了number
样例输入:a1b2c3
样例输出:anumberbnumbercnumber
数据范围:1 <= s.length < 10000。
思路:
使用双指针法
i指向新长度的末尾,j指向旧长度的末尾
从后往前遍历
先扩充数组
然后再倒序扩充(oldindex,newindex)
注意:
while是关键循环,因为需要一直执行
代码:
int main() {string s;while (cin >> s) {int count = 0;int oldindex = s.size() - 1;for (int i = 0; i < s.size(); i++) {if (s[i] >= '0' && s[i] <= '9') {count++;}}s.resize(s.size() + count * 5);int newindex = s.size() - 1;//关键循环,不断寻找符合条件的数字while (oldindex >= 0) {if (s[oldindex] >= '0' && s[oldindex] <= '9') {s[newindex--] = 'r';s[newindex--] = 'e';s[newindex--] = 'b';s[newindex--] = 'm';s[newindex--] = 'u';s[newindex--] = 'n';}//遇到不符合的情况的处理else {//此处如果写为s[newindex--] = s[oldindex--]//会报错,因为会超出oldindex范围s[newindex--] = s[oldindex];}oldindex--;}cout << s << endl;}
}
4.翻转字符串里面的单词
题目描述:
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
示例 2:
输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
示例 3:
输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
思路:
- 移除多余空格
- 将整个字符串反转
- 将每个单词反转
注意:
难度较高,条理需要清晰,先去除多余的空,然后再进行翻转处理
代码:
class Solution {void Reverse(string& s,int start,int end) {for (int i = start, j = end; i < j;i++,j--) {swap(s[i],s[j]);}}void removeextra(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);}string fanzhuan(string& s) {int start = 0;int end = s.size()-1;removeextra(s);Reverse(s, start,end);for (int i = 0; i <= s.size(); i++) {if (s[i] == ' ' || i == s.size()) {Reverse(s, start, i-1);start = i + 1;}}return s;}
};
5.右旋&&左旋字符串
题目描述:
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。
例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。
输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。
输出:输出共一行,为进行了右旋转操作后的字符串。
思路:
先整体翻转
然后前k个翻转
然后后面的翻转
注意:
注意翻转的顺序
reverse接受的是迭代器的参数,要格外注意
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main() {int n;string s;cin >> n;cin >> s;int len = s.size(); //获取长度//错误做法//reverse是标准库算法,需要传递迭代器参数//接受两个参数//first:表示要翻转范围的起始位置(包括 first 指向的元素)。//last:表示要翻转范围的结束位置(不包括 last 指向的元素,即[first, last)/*reverse(start, end);reverse(start, start + k - 1);reverse(start + k, end);*/reverse(s.begin(), s.end()); // 整体反转reverse(s.begin(), s.begin() + n); // 先反转前一段,长度nreverse(s.begin() + n, s.end()); // 再反转后一段cout << s << endl;}
左旋操作与此类似
int main() {string s;int n;cin >> s;cout << "please input n";cin >> n;reverse(s.begin(), s.begin() + n);reverse(s.begin() + n, s.end());reverse(s.begin(), s.end());cout << "s ==" << s << endl;
}
相关文章:
代码随想录之字符串刷题总结
目录 1.反转字符串 2.反转字符串II 3.替换数字 4.翻转字符串里面的单词 5.右旋&&左旋字符串 1.反转字符串 题目描述: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外…...
PS-基础学习(常用快捷键1.2-1.3)
常用快捷键 钢笔操作功能Alt 选择工具使用选择工具放到锚点上,按下alt,然后放到调整曲度的上面,可以修改一边的曲度可以修改出不平滑的转折点选择工具放到锚点上进行拖拽可以移动锚点的位置ctrl 选择工具使用选择工具,按住ctrl…...
qt QListView详解
1、概述 QListView 是 Qt 框架中的一个视图类,用于展示模型中的数据。它基于 QAbstractItemView,支持多种视图模式,如列表视图(List View)、图标视图(Icon View)等。QListView 是模型/视图框架…...
287. 寻找重复数
目录 题目我的解法解法 题目 给定一个包含 n 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。 你设计的解决方案…...
2024年最受欢迎的编程语言
No.1 JavaScript / TypeScript 自从创建第一个网站以使其动态化以来,JavaScript多年来一直受到欢迎。话虽如此,目前JavaScript是整个市场上需求量最大的编程语言。此外,TypeScript(一种具有类型安全性的JavaScript超集࿰…...
C++ 线程初始化编译报错
这是一个很简单的开启一个线程, 用于演示一个线程和生命周期之间的错误,但是还没有把这个错误暴露出来, 就遇见了一个编译问题. 线程中执行指定逻辑的代码 线程的执行方法, 声明写在了ThreadRun.h 实现写在 ThreadRun.cpp中. class ThreadRun { public: void func(); };void T…...
[MySQL]视图
视图是什么 视图(View)是一种虚拟存在的表。视图中的数据,来自定义视图的查询语句中,使用的表,并且是在使用视图时动态生成的。 简单讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在…...
Windows Server2012 R2搭建NFS服务器
正文共:1024 字 23 图,预估阅读时间:1 分钟 在测试vCenter的集群操作时,出现了共享vSAN错误的问题,导致无法继续。我也只好先创建一个共享NFS(Network File System,网络文件系统)存储…...
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
一、题目以及介绍 题目介绍: 1、表名:t_patent_detail (专利明细表) 2、表字段:专利号(patent_id)、专利名称(patent_name)、专利类型(patent_type)、申请时间(aplly_date)、授权时间(authorize_date)、申请人(apply_…...
使用sealos部署的集群在部署metrics-server时日志x509
1、下载文件并进行部署 wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml2、进行部署 kubectl apply -f components.yaml3、发现问题 pod容器已经启动但是健康检查没有通过 kubectl get pod -n kube-system metrics-server…...
WPF怎么通过RestSharp向后端发请求
1.下载RestSharpNuGet包 2.请求类和响应类 public class ApiRequest {/// <summary>/// 请求地址/// </summary>public string Route { get; set; }/// <summary>/// 请求方式/// </summary>public Method Method { get; set; }/// <summary>//…...
promise的用法以及注意事项,看了这篇你就会了
一,为什么要使用promise,ta能解决那些问题? Promise 是异步编程的一种解决方案: 从语法上讲,Promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间…...
vue3如何使用pinia设置全局状态,附常见面试题
1. stores/index.ts 文件 在 index.ts 中创建 store 实例并封装了注册逻辑,这样可以方便地将整个 Pinia 实例注册到 Vue 应用中。代码如下: import type { App } from vue import { createPinia } from piniaconst store createPinia()// 全局注册 st…...
lerna+umi ‘max‘ 不是内部或外部命令,也不是可运行的程序
lerna不管version7还是老版都报 $ max setup max 不是内部或外部命令,也不是可运行的程序 或批处理文件。 error Command failed with exit code 1. 这点问题是因为lerna没编译完成; 解决: 首先我们在lerna packages 里用cli 安装umi;然后…...
美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年
自2019年5G牌照发放开始,经过五年发展,我国5G在基础设施建设、用户规模、创新应用等方面均取得了显著成绩,5G网络建设也即将从基础的大范围覆盖向各产业融合的全场景应用转变。工业和信息化部数据显示,5G行业应用已融入76个国民经…...
「C/C++」C/C++ 指针篇 之 指针运算
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...
计算机网络网络层笔记
互联网提供的两种服务 1.虚电路服务 2.数据报服务 需要记住的是现在只用第二种也就是数据报服务 网际协议IP 物理层的中断系统:转发器(hub) 链路层的中断系统:交换机 网络层的中断系统:路由器 网络层以上:网关 如上图所示,网关是用来访问其他的网段的一个接口,网关的地…...
长亭那个检测能力超强的 WAF,出免费版啦
告诉你们一个震撼人心的消息,那个检测能力超强的 WAF——长亭雷池,他推出免费社区版啦,体验地址见文末。 八年前我刚从学校毕业,在腾讯做安全研究,看到宇森在 BlackHat 上演讲的议题 《永别了,SQL 注入》 …...
rabbitMQ RabbitTemplate 发送消息
消息发送确认机制 消息发送确认机制:消息由producer发送后,确认其是否到达broker,又是否被exchange转发至对应queue的机制 该机制分为两部分:producer---broker,exchange---queue 前者的实现依靠ConfirmCallback机制…...
本系列是《10万字208道Java经典面试题总结(附答案)》的2024修订版。
公众号 后端学习指南 本系列是《10万字208道Java经典面试题总结(附答案)》的2024修订版。 1、说说跨平台性 我们希望编写好的代码和程序,最好可以在任意平台和环境下运行,而不需要根据不同的平台,编写不同的代码。 比如,我编写的一个博客管理系统,我希望它可以在windo…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
