【算法day7】字符串:反转与替换
题目引用
- 反转字符串
- 反转字符串II
- 替换数字
1.反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:s = [“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]
示例 2:
输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]
输出:[“h”,“a”,“n”,“n”,“a”,“H”]
相信不少同学看到题目之后就已经想到了C++的库函数reverse了,用这个做当然可以,毕竟只要做出来,怎么快怎么来。但是我们还是来看看怎么不用库函数解决这道问题吧。
首先定义一个头指针i,尾指针j,不断循环交换i和j位置的值,并且缩小区间,当i≮ j时循环结束,字符串也被反转了。
来看代码
void reverseString(vector<char>& s) {for(int i=0,j=s.size()-1;i<j;i++,j--){swap(s[i],s[j]);}}
短短的也很可爱哦~
2.反转字符串II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = “abcdefg”, k = 2
输出:“bacdfeg”
示例 2:
输入:s = “abcd”, k = 2
输出:“bacd”
这里的题目写的比较生硬,容易让人看不懂。我们自己来分析一下吧,我们需要根据题目给出的k来寻找反转的区间,我们每次走2* k个位置,然后判断剩下的位置够不够k个,所以我们是以后面元素的个数来判断对后面n-i*(2*k)个位置是什么样的操作。
也就是说我们每次走2* k个位置,如果后面的元素个数>k,那么我们就反转后面k个,如果不够k个就全部反转。
那么就来看代码吧:
string reverseStr(string s, int k) {for(int i=0;i<s.size();i+=(2*k)){if((i+k)<s.size()){reverse(s.begin()+i,s.begin()+i+k);}else{reverse(s.begin()+i,s.end());}}return s;}
3.替换数字
题目描述
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。 例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。
输入描述
输入一个字符串 s,s 仅包含小写字母和数字字符。
输出描述
打印一个新的字符串,其中每个数字字符都被替换为了number
输入示例
a1b2c3
输出示例
anumberbnumbercnumber
这道题目就稍微有一点难度了,不仅因为是IO机制,而且需要我们对字符串这个类有一定的理解。C++里面的string是可以使用resize修改空间的,我们先用sOldIndex记录一下现在字符串的最后一位,遍历一遍字符串,用count记录字符串中数字的个数,再利用resize将空间修改为5*count+s.size(),用sNewIndex指针标记现在字符串的最后一位,然后从后向前遍历,sOldIndex先走,当遇到非数字时就将其赋值给sNewIndex位置,并让sNewIndex--,当遇到数字时,sNewIndex--并把number倒序放入字符串中,当sNewIndex<0时循环结束。
来看代码:
#include <iostream>
using namespace std;
int main() {string s;while (cin >> s) {int sOldIndex = s.size() - 1;int count = 0; // 统计数字的个数for (int i = 0; i < s.size(); i++) {if (s[i] >= '0' && s[i] <= '9') {count++;}}// 扩充字符串s的大小,也就是将每个数字替换成"number"之后的大小s.resize(s.size() + count * 5);int sNewIndex = s.size() - 1;// 从后往前将数字替换为"number"while (sOldIndex >= 0) {if (s[sOldIndex] >= '0' && s[sOldIndex] <= '9') {s[sNewIndex--] = 'r';s[sNewIndex--] = 'e';s[sNewIndex--] = 'b';s[sNewIndex--] = 'm';s[sNewIndex--] = 'u';s[sNewIndex--] = 'n';} else {s[sNewIndex--] = s[sOldIndex];}sOldIndex--;}cout << s << endl; }
}
总结
今天的题目呢难度并不大,主要是熟悉字符串的各种操作,那么今天就到这里吧,大家天天开心~
相关文章:
【算法day7】字符串:反转与替换
题目引用 反转字符串反转字符串II替换数字 1.反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&am…...
分布式存储厂商
分布式存储 以下是对分布式存储厂商XSKY星辰天合、IOMesh(SmartX)、SmartX的深度对比: 1. XSKY星辰天合 产品与服务:XSKY星辰天合提供统一存储平台,支持块、文件和对象存储服务。已为近2400家大型政企机构实施部署&…...
合合信息扫描全能王线下体验活动:科技与人文的完美交融
文章目录 前言签到欢迎仪式产品体验智能高清滤镜去除透字效果照片高清修复 破冰行动会议感受 前言 作为合合信息旗下扫描全能王的忠实粉丝,上周,我很荣幸参与了扫描全能王“扫出你的能量buff”快闪活动及技术交流会。这次活动的不仅让我对这款强大的文档…...
单链表在Go语言中的实现与操作
简介 单链表是一种基本的线性数据结构,由节点组成,每个节点存储数据和指向下一个节点的指针。今天,我们将深入探讨如何在Go语言中实现和操作单链表。 单链表的优缺点 优点: 动态内存分配,灵活性高。插入和删除节点操…...
网关整合sentinel无法读取nacos配置问题分析
sentinel无法读取nacos配置问题分析 1.spring-cloud-gateway整合sentinel2.问题现象3.原因猜测4.源码分析4. 结语 最近公司需要上线一个集约项目,虽然为内网项目,但曾经有过内网被攻破,导致内部系统被攻击的案例,且集约系统同时在…...
简化XPath表达式的方法与实践
XPath表达式用于在XML或HTML文档中定位元素。有时候,XPath表达式可能会变得非常冗长和复杂,这不仅难以阅读和维护,而且也可能影响性能。因此,学会如何简化XPath表达式是非常重要的。本文将介绍几种简化XPath表达式的方法ÿ…...
【文件下载】接口传递文件成功和失败时,前端的处理方式
问题 使用bold类型从后端接口获取文件流,获取成功的时候通过a标签下载;失败的时候,后端返回的是json,这个时候就无法向用户展示后端返回的错误提示信息。 思路 根据返回类型是否为 application/json 区分是否返回成功ÿ…...
html+css网页设计马林旅行社移动端4个页面
htmlcss网页设计马林旅行社移动端4个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…...
视频 的 音频通道提取 以及 视频转URL 的在线工具!
视频 的 音频通道提取 以及 视频转URL 的在线工具! 工具地址: https://www.lingyuzhao.top/toolsPage/VideoTo.html 它提供了便捷的方法来处理视频文件,具体来说是帮助用户从视频中提取音频轨道,并将视频转换为可以通过网络访问的URL链接。无…...
容易被遗忘的测试用例
网络服务器启动了吗?应用程序服务器启动了吗?数据库上线了吗?测试数据是否预先加载到数据库中?每当我们准备开始测试应用程序时,一切都应该已经准备妥当。 然而,当测试开始后,我们可能会漏掉一些…...
uni-app写的微信小程序如何实现账号密码登录后获取token,并且每天的第一次登录后都会直接获取参数而不是耀重新登录(2)
接uni-app写的微信小程序如何实现账号密码登录后获取token,并且每天的第一次登录后都会直接获取参数而不是耀重新登录(1), 在main.js中 import App from ./App// #ifndef VUE3 import Vue from vue import ./uni.promisify.adap…...
统计中间件稳定性指标
目前订单业务域涉及中间件:MySQL、Redis、TiDB、MQ、ES。(遗漏项请补充) 一、RDS 资源使用率 实例ID实例名称规格maxCPUavgCPUmaxDISKmaxIOPSavgIOPS活跃会话maxTPSavgTPSmaxQPSavgQPS实例风险 慢查询 慢查询会消耗大量的系统资源&#x…...
移动端使用REM插件postcss之postcss-px2rem
目录 一、概念 二、核心特性 三、功能 四、插件模块 注意事项: 五、使用 安装: 配置 一、概念 工具类型:PostCSS是一个基于JavaScript的工具,用于转换CSS的工作流。核心理念:PostCSS的核心理念是“转换而非替…...
FPGA Xilinx维特比译码器实现卷积码译码
FPGA Xilinx维特比译码器实现卷积码译码 文章目录 FPGA Xilinx维特比译码器实现卷积码译码1 Xilinx维特比译码器实现2 完整代码3 仿真结果 MATLAB (n,k,m)卷积码原理及仿真代码(你值得拥有)_matlab仿真后代码-CSDN博客 MATLAB 仿真…...
hive 行转列
行转列的常规做法是,group bysum(if())【或count(if())】 建表: CREATE TABLE table2 (year INT,month INT,amount DOUBLE );INSERT INTO table2 (year, month, amount) VALUES(1991, 2, 1.2),(1991, 3, 1.3),(1991, 4, 1.4),(1992, 1, 2.1),(1992, 2, 2.2),(1992…...
Vue中使用ECharts图表中的阈值标记(附源码)
在数据处理和可视化领域,我们经常需要对一系列数据点进行分析。本文将介绍如何在给定的数据点中找到对应于特定Y值的X值,并设置标线起始点标记在ECharts图表中,效果图如下: 实现步骤 1、数据准备 let seriesData [// 提供日期…...
【特征融合】融合空间域和频率域提升边缘检测能力
基于深度学习的边缘检测方法已显示出巨大的优势,并获得了可喜的性能。然而,目前大多数方法只能从空间(RGB)域提取特征进行边缘检测,可挖掘的信息有限。因此,这些方法无法很好地应用于物体与背景颜色相似的场景。为了应对这一挑战,提出了一种融合空间域和频率域特征的新型…...
深入理解AVL树:结构、旋转及C++实现
1. AVL树的概念 什么是AVL树? AVL树是一种自平衡的二叉搜索树,其发明者是Adelson-Velsky和Landis,因此得名“AVL”。AVL树是首个自平衡二叉搜索树,通过对树的平衡因子进行控制,确保任何节点的左右子树高度差最多为1&…...
AUTOSAR AP 汽车API知识点总结(Automotive API )R24-11
汽车API知识点总结 一、背景与目标 背景:智能互联汽车正逐步依赖远程诊断、软件更新等功能以确保行驶安全,并且用户已习惯于通过智能设备中的应用程序控制连接设备。虽然AUTOSAR标准支持车辆软件的可更新性,但尚未提供将AUTOSAR应用产生的数据和功能安全可靠地暴露给非AUTO…...
【HarmonyOS开发】超详细的ArkTS入门
安装DevEco Studio和新建项目就不多说了,可以移步官网 就可以把他们拆成这几个部分了,如果看不懂可以暂时忽略下面冒号后面的内容 装饰器:用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中Entry、Component和St…...
SEO_避开常见SEO误区,让你的优化更高效
SEO误区:避开常见陷阱,让你的优化更高效 在当前互联网营销的环境中,搜索引擎优化(SEO)是一个至关重要的环节。无论你是一个新手还是有一些经验的网站管理者,都会遇到各种各样的SEO误区。这些误区不仅可能浪…...
P1AM CPU库:工业级嵌入式I/O控制框架解析
1. P1AM CPU库技术解析:面向工业自动化场景的嵌入式I/O控制框架1.1 平台定位与工程价值P1AM(ProductivityOpen Automation Module)并非通用型MCU开发板,而是一个专为工业现场总线级I/O扩展设计的嵌入式控制器平台。其核心价值在于…...
LeetCode 二叉搜索树双神题通关!有序数组转平衡 BST + 验证 BST,小白递归一把梭
前言 二叉搜索树(BST)是算法刷题的高频必考知识点!今天给大家带来两道最经典、最基础的 BST 题目,全程用最简单的递归实现,代码干净、思路直白,不用死记硬背,看完就能直接写! 一道教…...
深度学习模型的解释性与可解释AI:从原理到实践
深度学习模型的解释性与可解释AI:从原理到实践 1. 背景介绍 深度学习模型在各种任务中取得了优异的性能,但它们通常被视为"黑盒",缺乏可解释性。随着AI应用在关键领域的普及,模型的可解释性变得越来越重要。本文将深入…...
EMDB:面向MCU的嵌入式键值数据库设计与实践
1. 项目概述EMDB(Embedded Micro Database)是一个专为资源受限嵌入式系统设计的极简型键值数据库,其核心目标是在微控制器级别提供可查询、可持久化、内存友好的数据管理能力。与传统嵌入式KV存储(如简单的哈希表或链表缓存&#…...
创意随笔:智能转录便携终端
创意随笔|智能转录便携终端 项目构想 核心亮点 以独立麦克风拾音为核心入口,实现全链路闭环实时翻译 从收音、ASR 识别、翻译、TTS 合成到语音播放/耳机输出,全程不依赖手机或电脑算力,自成一套完整翻译系统,真正做到端…...
**发散创新:基于Python的轻量级知识推理引擎实现与实战**在人工智能飞速发展的今天,**知识推理**
发散创新:基于Python的轻量级知识推理引擎实现与实战 在人工智能飞速发展的今天,知识推理已成为构建智能系统的核心能力之一。它不仅支撑着推荐系统、问答机器人和语义搜索等场景,更是实现AI从“感知”向“理解”跃迁的关键路径。本文将带你…...
AI 模型推理延迟与吞吐率的权衡
AI模型推理延迟与吞吐率的权衡:优化策略与实践 在AI应用场景中,模型推理的延迟(Latency)和吞吐率(Throughput)是衡量系统性能的两大核心指标。延迟指单次请求的响应时间,直接影响用户体验&…...
紧急预警!Vim惊现远程代码执行漏洞CVE-2026-34714,开发者必看防护指南
紧急预警!Vim惊现远程代码执行漏洞CVE-2026-34714,开发者必看防护指南 作为天天和代码打交道的你,有没有想过:打开一个“普通文本文件”的瞬间,系统可能已经被植入后门?2026年3月,Vim官方披露的…...
PADS VX2.8 极坐标布局技巧:圆形灯板LED高效排列指南
1. 极坐标布局在圆形灯板设计中的核心价值 第一次接触圆形LED灯板设计时,我被密密麻麻的元件排列搞得头晕眼花。传统直角坐标系下,要精确控制每个LED灯珠的间距和角度,需要反复计算XY坐标,效率极低。直到发现PADS VX2.8的极坐标功…...
