代码随想录算法训练营Day08 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字
文章目录
- 344.反转字符串
- 思路与重点
- 541. 反转字符串II
- 思路与重点
- 卡码网:54.替换数字
- 思路与重点
344.反转字符串
- 题目链接:344. 反转字符串 - 力扣(LeetCode)
- 讲解链接:代码随想录 (programmercarl.com)
- 状态:一遍AC。
思路与重点
- 如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。
- 如果库函数仅仅是解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。
- swap可以通过位运算实现。
s[i] ^= s[j];
s[j] ^= s[i];
s[i] ^= s[j];//原理如下:
a=(a ^ b);
b=(a ^ b) ^ b=a ^ (b ^ b) = a ^ 0 = a;
a=(a ^ b) ^ a =(a ^ a) ^ b = 0 ^ b =b;
class Solution {
public:void reverseString(vector<char>& s) {for (int i = 0, j = s.size() - 1; i < s.size()/2; i++, j--) {swap(s[i],s[j]);}}
};
541. 反转字符串II
- 题目链接:541. 反转字符串 II - 力扣(LeetCode)
- 讲解链接:代码随想录 (programmercarl.com)
- 状态:两次AC。
思路与重点
- 其实在遍历字符串的过程中,只要让** i += (2 * k)**,i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。因为要找的也就是每2 * k 区间的起点,这样写,程序会高效很多。所以当需要固定规律一段一段去处理字符串的时候,要想想在在for循环的表达式上做做文章。
class Solution {
public:string reverseStr(string s, int k) {for (int i = 0; i < s.size(); i += (2 * k)) {// 1. 每隔 2k 个字符的前 k 个字符进行反转// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符if (i + k <= s.size()) {reverse(s.begin() + i, s.begin() + i + k );} else {// 3. 剩余字符少于 k 个,则将剩余字符全部反转。reverse(s.begin() + i, s.end());}}return s;}
};
卡码网:54.替换数字
- 题目链接:54. 替换数字(第八期模拟笔试) (kamacoder.com)
- 讲解链接:代码随想录 (programmercarl.com)
- 状态:一遍AC。
思路与重点
- 其实很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。这么做有两个好处:1. 不用申请新数组。2. 从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。
#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; }
}
相关文章:
代码随想录算法训练营Day08 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数字
文章目录 344.反转字符串思路与重点 541. 反转字符串II思路与重点 卡码网:54.替换数字思路与重点 344.反转字符串 题目链接:344. 反转字符串 - 力扣(LeetCode)讲解链接:代码随想录 (programmercarl.com)状态ÿ…...
mysql锁之乐观锁、悲观锁、表锁、行锁、共享锁、排他锁
mysql锁之乐观锁、悲观锁、表锁、行锁、共享锁、排他锁 MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一个资源的机制,在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资…...
【软件干货】Android应用进程如何保活?
1.Android 应用进程保活方法介绍 在Android应用程序中,为了保证应用的正常运行和稳定性,有时需要对应用进程进行保活。以下是一些实现进程保活的方法: 1、使用前台服务(Foreground Service):将服务调用startForeground()方法&…...

neo4j部署保姆级教程
由于公司是基于大数据架构的,让部署neo4j数据库,之前没有接触过,然后紧急学了一下,并且从网上找了一些教程,决定还是记录下来,后续有时间了会在出一篇使用教程 环境准备(root用户) …...

【STM32CubeMX开发】-2.2-TIM_输出一个PWM信号
目录 1 Tim定时器的时钟源 2 Tim定时器的配置 2.1 PWM配置 2.2 中断配置 3 生成代码 4 测试结果 结尾 1 Tim定时器的时钟源 TIM3的时钟来源自APB1 Timer clocks,时钟树上所有总线频率均设置为了STM32F0能达到的最高频率,此时APB1 Timer clocks …...

Ngx+Lua+Redis 快速存储POST数据
系统几万台设备有windows有安卓还有linux系统,每个设备三分钟就会向服务器post设备的硬件信息,数据格式json,后台管理界面只需要最新的数据,不需要历史数据,业务逻辑非常简单,PHP代码就几行,已经…...
go-delve的使用
go-delve的非交互使用方式: dlv要执行的命令文件:cmd.dlv goroutines exit 执行非交互命令: yes n | dlv --allow-non-terminal-interactivetrue attach $pid --init cmd.dlv --end--...
Python网络爬虫技术详解
Python网络爬虫技术详解 引言 网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定规则自动抓取互联网信息的程序或脚本。它们通过遍历网页链…...

Golang | Leetcode Golang题解之第474题一和零
题目: 题解: func findMaxForm(strs []string, m, n int) int {dp : make([][]int, m1)for i : range dp {dp[i] make([]int, n1)}for _, s : range strs {zeros : strings.Count(s, "0")ones : len(s) - zerosfor j : m; j > zeros; j--…...
算法刷题技巧
算法题:https://leetcode.cn/studyplan/top-100-liked/ 哈希表 使用哈希表,增删改查的时间复杂度均为O(1)。何时使用哈希表? 在某个区域内查找一个已知元素,可以使用哈希表作为这个区域根据一个特征对元素进行分类,特征…...

BMS、EMS PCS 简介
1 储能系统的构成 完整的电化学储能系统主要由电池组、电池管理系统(BMS)、能量管理系统(EMS)、储能变流器(PCS)以及其他电气设备构成。 在储能系统中,电池组将状态信息反馈给电池管理系统BMS&…...

spug3发布项目
一、启动spug项目 1.spug代码仓库地址: spug: 开源运维平台:面向中小型企业设计的无 Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布、任务计划、配置中心、监控、报警等一系列功能。 - Gitee.com 注…...

鸿蒙HarmonyOS开发:应用权限的基本概念及如何申请应用权限详细介绍
文章目录 一、访问控制二、应用权限1、应用权限管控2、权限使用的基本原则3、授权方式4、权限等级 三、申请应用权限1、选择申请权限的方式2、声明权限3、声明样例4、二次向用户申请授权5、具体实现示例6、效果展示 四、应用权限列表1、system_grant(系统授权&#…...

mac 桌面版docker no space left on device
报错信息 docker pull镜像时报: failed to register layer: Error processing tar file(exit status 1): write /home/admin/oceanbase_bak/bin/observer: no space left on device 解决 增加 docker 虚拟磁盘大小。 调整完点击重启即可。...
基于CIM的街镇基层治理统一指挥平台建设方案
1 项目概述 1.1 建设背景 社区作为人民生活的重要区域,往往需要对社区内人员、房屋、基本设施、日常业务进行规范管理,以保证其正常运行,但是传统的社区治理方式已不能满足新时代社会发展的要求,如人工采集录入信息、人员现场巡逻等,这些工作方式不仅工作量大,而且效率…...

PostgreSQL学习笔记三:数据类型和运算符
数据类型和运算符 PostgreSQL 支持多种数据类型和运算符,以下是一些常见的数据类型和运算符的概述: 数据类型 基本数据类型 整数类型: SMALLINT:2 字节,范围 -32,768 到 32,767。INTEGER:4 字节࿰…...

ROS理论与实践学习笔记——6 ROS机器人导航(仿真)
在 ROS 中,机器人导航(Navigation)是由多个功能包组合而成的系统,统称为导航功能包集(navigation stack)。它提供了一个全面的框架,使得移动机器人能够自主导航到指定目标点,同时避开…...
uniapp开发微信小程序,button的open-type=“share“ 分享给个人跳转到首页问题
当使用button标签带上open-type"share"属性,点击之后可分享当前页面给微信好友,但是分享之后朋友点开跳转到了首页问题。 需要使用 onShareAppMessage 函数 export default {onShareAppMessage(res) {if (res.from button) {// 来自页面内分…...

【jQuery】 jQuery基础及选择器介绍(基本选择器 层次选择器 属性选择器 过滤选择器)
文章目录 jQuery基础1. 优势2. 版本3. 基本语法4. 选择器基本选择器层次选择器属性选择器过滤选择器基本过滤选择器可见性过滤选择器 注意事项 jQuery基础 jQuery 是一个功能强大且易于使用的 JavaScript 库,它极大地简化了前端开发的工作。无论是 DOM 操作、事件处…...

网站在对抗机器人攻击的斗争中失败了
95% 的高级机器人攻击都未被发现,这一发现表明当前的检测和缓解策略存在缺陷。 这表明,虽然一些组织可能拥有基本的防御能力,但他们没有足够的能力应对更复杂的攻击。 例如利用人工智能和机器学习来模仿人类行为的攻击。 这些统计数据强调…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...