当前位置: 首页 > article >正文

[LeetCode] 字符串 I — 344#反转字符串 | 541#反转字符串II | 54K替换数字

字符串

  • 基础知识
  • 344# 反转字符串
  • 541# 反转字符串II
  • 54K 替换数字

基础知识

字符串的结尾:空终止字符00

char* name = "hello"; // 字符串不可拓展(由于是一个固定分配的内存块),有些地方必须加const
char name2[5] = {'h', 'e', 'l', 'l', 'o'}; // 字符数组没有空终止字符(非字符串)
char name2[6] = {'h', 'e', 'l', 'l', 'o', '\\0'}; // 或 0 
//strlen()(计算到空终止字符)

std::string基本是baseString类(模板类)的模板版本,模板参数是char

cplusplus_std::string

#include <string>
std::string name = "Hello"; // 默认const
std::cout << name << std::endl;
// .size(), .find() (不存在:std::string::npos)
// 没有contains函数,实现:
bool contains = name.find("no") != std::string::npos

宽字符:wchar_t

const char* name = u8"Hello"; // 1字节,utf8 std::string
const char16_t* name2 = u"Hello"; // 2字节,utf16 std::u16string
const char32_t* name3 = U"Hello"; // 4字节,utf32 std::u32string
const wchar_t* name4 = L"Hello"; // 2字节(由编译器决定,在大多数Unix/Linux系统上通常是32位)std::wstring

更多用法:

// 遍历字符串数组s,如:char s[5] = "asd";
for (int i = 0; s[i] != '\0'; i++) { }
// 遍历字符串s
for (int i = 0; i < s.size(); i++) { }std::string.resize(new_length, '\0'); // 截断/扩充 O(1)~O(n)

344# 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 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"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符
// 首尾指针
// O(n) 0ms; O(1) 26.59MB
class Solution {
public:void reverseString(vector<char>& s) {int left = 0, right = s.size() - 1;while (left < right) {swap(s[left++], s[right--]);}}
};
// swap()的两种实现
int tmp = s[i];
s[i] = s[j];
s[j] = s[i];s[i] ^= s[j];
s[j] ^= s[i];
s[i] ^= s[j];

541# 反转字符串II

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

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

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

提示:

  • 1 <= s.length <= 10^4
  • s 仅由小写英文组成
  • 1 <= k <= 10^4

当需要固定规律一段一段去处理时,考虑在for循环上做调整

// 344衍生,处理for循环条件
// O(n) 0ms; O(1) 9.43MB
class Solution {
public: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); // reverse不包括last} else {reverse(s.begin() + i, s.end());}}return s;}
}; 

54K 替换数字

题目链接

题目描述

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

输入描述

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

输出描述

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

输入示例

a1b2c3

输出示例

anumberbnumbercnumber

提示信息

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

首先扩充数组到每个数字字符替换成 "number"之后的大小

再用双指针法,从旧尾向新尾替换字符

// 双指针法从后向前扩充数组
// O(n) 35ms; O(1) 2.18MB
#include<iostream>using namespace std;int main() {string s;while (cin >> s) {int n = s.size();int count = 0; // 统计数字for (int i = 0; i < n; i++) {if (s[i] >= '0' && s[i] <= '9') count++;}// 扩充字符串s.resize(n + count * 5);int s_oldTail = n - 1, s_newTail = s.size() - 1;while (s_oldTail <= s_newTail && s_oldTail >= 0) {if (s[s_oldTail] >= '0' && s[s_oldTail] <= '9') {s[s_newTail--] = 'r';s[s_newTail--] = 'e';s[s_newTail--] = 'b';s[s_newTail--] = 'm';s[s_newTail--] = 'u';s[s_newTail--] = 'n';s_oldTail--;}else {s[s_newTail--] = s[s_oldTail--];}}cout << s << endl;}return 0;
}

本文参考了 LeetCode官方题解 及 代码随想录

相关文章:

[LeetCode] 字符串 I — 344#反转字符串 | 541#反转字符串II | 54K替换数字

字符串 基础知识344# 反转字符串541# 反转字符串II54K 替换数字 基础知识 字符串的结尾&#xff1a;空终止字符00 char* name "hello"; // 字符串不可拓展&#xff08;由于是一个固定分配的内存块&#xff09;&#xff0c;有些地方必须加const char name2[5] {h,…...

使用 Docker 运行 Oracle Database 23ai Free 容器镜像并配置密码与数据持久化

使用 Docker 运行 Oracle Database 23ai Free 容器镜像并配置密码与数据持久化 前言环境准备运行 Oracle Database 23ai Free 容器基本命令参数说明示例 注意事项高级配置参数说明 总结 前言 Oracle Database 23ai Free 是 Oracle 提供的免费版数据库&#xff0c;基于 Oracle …...

rust 发包到crates.io/ 操作流程 (十)

第一步github登录 https://crates.io/ 在项目里面login&#xff1a; cargo login ciol4sMwaR61YvzWniodRlssk6RfS4HcZTU --registry crates-io如果不想每次带 这个&#xff0c;就执行 vim ~/.cargo/config.toml 添加下面 [registry] default "crates-io"git a…...

GD32L233RB 驱动数码管

1.数码管有8段A、B、C、D、E、F、G 和 H小数点 以及片选信号&#xff08;DIG&#xff09; DIG用来选择那一位&#xff0c;A-G 用来显示段 静态显示每次只能一次显示单个位 动态显示&#xff08;动态扫描&#xff09;所有的位显示结束要在10ms左右 显示2ms 消光1ms 实…...

MongoDB部署模式

目录 单节点模式&#xff08;Standalone&#xff09; 副本集模式&#xff08;Replica Set&#xff09; 分片集群模式&#xff08;Sharded Cluster&#xff09; MongoDB有多种部署模式&#xff0c;可以根据业务需求选择适合的架构和部署方式。 单节点模式&#xff08;Standa…...

国自然重点项目|代谢影像组学只能预测肺癌靶向耐药的关键技术与应用|基金申请·25-01-25

小罗碎碎念 今天和大家分享一个国自然重点项目&#xff0c;项目执行年限为2019.01 - 2023.12&#xff0c;直接费用为294万。 项目聚焦肺癌靶向治疗中药物疗效预测难题&#xff0c;整合多组学与代谢影像数据展开研究。 在研究过程中&#xff0c;团队建立动物模型获取多维数据&am…...

NFT Insider #166:Nifty Island 推出 AI Agent Playground;Ronin 推出1000万美元资助计划

引言&#xff1a;NFT Insider 由 NFT 收藏组织 WHALE Members、BeepCrypto 联合出品&#xff0c; 浓缩每周 NFT 新闻&#xff0c;为大家带来关于 NFT 最全面、最新鲜、最有价值的讯息。每期周报将从 NFT 市场数据&#xff0c;艺术新闻类&#xff0c;游戏新闻类&#xff0c;虚拟…...

Word 中实现方框内点击自动打 √ ☑

注&#xff1a; 本文为 “Word 中方框内点击打 √ ☑ / 打 ☒” 相关文章合辑。 对第一篇增加了打叉部分&#xff0c;第二篇为第一篇中方法 5 “控件” 实现的详解。 在 Word 方框内打 √ 的 6 种技巧 2020-03-09 12:38 使用 Word 制作一些调查表、检查表等&#xff0c;通常…...

GoFrame MongoDB 使用指南

GoFrame MongoDB 使用指南 1. 安装依赖 # 安装官方MongoDB驱动 go get -u go.mongodb.org/mongo-driver/mongo go get -u go.mongodb.org/mongo-driver/mongo/options go get -u go.mongodb.org/mongo-driver/bson2. MongoDB 连接示例 package mainimport ("context&qu…...

Cpp::静态 动态的类型转换全解析(36)

文章目录 前言一、C语言中的类型转换二、为什么C会有四种类型转换&#xff1f;内置类型 -> 自定义类型自定义类型 -> 内置类型自定义类型 -> 自定义类型隐式类型转换的坑 三、C强制类型转换static_castreinterpret_castconst_castdynamic_cast 四、RTTI总结 前言 Hell…...

4.flask-SQLAlchemy,表Model定义、增删查改操作

介绍 SQLAlchemy是对数据库的一个抽象 开发者不用直接与SQL语句打交道 Python对象来操作数据库 SQLAlchemy是一个关系型数据库 安装 flask中SQLAlchemy的配置 from flask import Flask from demo.user_oper import userdef create_app():app Flask(__name__)# 使用sessi…...

基于 WEB 开发的手机销售管理系统设计与实现内容

标题:基于 WEB 开发的手机销售管理系统设计与实现 内容:1.摘要 摘要&#xff1a;随着智能手机的普及和电子商务的快速发展&#xff0c;手机销售行业面临着越来越多的挑战和机遇。为了提高销售效率和管理水平&#xff0c;本文设计并实现了一个基于 WEB 的手机销售管理系统。该系…...

JavaScript 验证 API:全面解析与实战指南

JavaScript 验证 API:全面解析与实战指南 引言 随着互联网技术的不断发展,前端开发领域的重要性日益凸显。JavaScript 作为前端开发的核心技术之一,其功能性和可扩展性得到了广泛关注。验证功能是JavaScript中不可或缺的一部分,它保证了用户输入数据的正确性和有效性。本…...

20250122-正则表达式

1. 正则标记 表示一位字符&#xff1a;\\ 表示指定的一位字符&#xff1a;x 表示任意的一位字符&#xff1a;. 表示任意一位数字&#xff1a;\d 表示任意一位非数字&#xff1a;\D 表示任意一个字母&#xff1a;[a-zA-Z]&#xff08;大写或小写&#xff09; 表示任意一个…...

SpringBoot3+Vue3开发学生选课管理系统

功能介绍 分三个角色登录&#xff1a;学生登录&#xff0c;老师登录&#xff0c;教务管理员登录&#xff0c;不同用户功能不同&#xff01; 1.学生用户功能 选课记录&#xff0c;查看选课记录&#xff0c;退选。选课管理&#xff0c;进行选课。通知管理&#xff0c;查看通知消…...

Effective C++ 规则47: 请使用 Traits Class 表现类型信息

1、背景 C 是一种静态类型语言&#xff0c;类型的特性在编译期就可以被识别和操作。为了更好地利用编译期信息来编写高效、灵活、可维护的代码&#xff0c;C 提供了一些技术来“萃取”或“提取”类型的相关信息。即利用 traits 类来封装和提取类型信息&#xff0c;以便在编译期…...

媒体新闻发稿要求有哪些?什么类型的稿件更好通过?

为了保证推送信息的内容质量&#xff0c;大型新闻媒体的审稿要求一向较为严格。尤其在商业推广的过程中&#xff0c;不少企业的宣传稿很难发布在这些大型新闻媒体平台上。 媒体新闻发稿要求有哪些&#xff1f;就让我们来了解下哪几类稿件更容易过审。 一、媒体新闻发稿要求有哪…...

“AI教学实训系统:打造未来教育的超级引擎

嘿&#xff0c;各位教育界的伙伴们&#xff0c;今天我要跟你们聊聊一个绝对能让你们眼前一亮的教学神器——AI教学实训系统。作为资深产品经理&#xff0c;我可是亲眼见证了这款系统如何颠覆传统教学&#xff0c;成为未来教育的超级引擎。 一、什么是AI教学实训系统&#xff1f…...

基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

【2024年华为OD机试】(A卷,200分)- 查找树中元素 (JavaScriptJava PythonC/C++)

一、问题描述 题目解析 题目描述 题目要求根据输入的坐标 (x, y) 在树形结构中找到对应节点的内容值。其中: x 表示节点所在的层数,根节点位于第0层,根节点的子节点位于第1层,依此类推。y 表示节点在该层内的相对偏移,从左至右,第一个节点偏移为0,第二个节点偏移为1,…...

Pyecharts图表交互功能提升

在数据可视化中&#xff0c;交互功能可以极大地提升用户体验&#xff0c;让用户能够更加深入地探索数据。Pyecharts 提供了多种强大的交互功能&#xff0c;本篇将重点介绍如何使用缩略轴组件、配置图例交互&#xff0c;让我们的数据可视化作品更加生动有趣。 一、缩略轴组件使…...

用layui表单,前端页面的样式正常显示,但是表格内无数据显示(数据库连接和获取数据无问题)——已经解决

这是我遇到的错误 原因&#xff1a;后端控制台的数据格式没有设置清楚 解决&#xff1a;1、加注释 ResponseBody &#xff0c;确保返回的是json数据。 2、要传三个参数到前端&#xff0c;如下图第二个红色框框所示。因为layui框架代码如果未修改&#xff0c;默认要传入这三个…...

单片机基础模块学习——按键

一、按键原理图 当把跳线帽J5放在右侧&#xff0c;属于独立按键模式&#xff08;BTN模式&#xff09;&#xff0c;放在左侧为矩阵键盘模式&#xff08;KBD模式&#xff09; 整体结构是一端接地&#xff0c;一端接控制引脚 之前提到的都是使用了GPIO-准双向口的输出功能&#x…...

elk 安装

创建elk网络 docker network create -d bridge elkelasticsearch 创建目录 mkdir -p /data/elasticsearch/{conf,logs,data,plugins}vim /data/elasticsearch/conf/elasticsearch.ymlcluster.name: "es-cluster" network.host: 0.0.0.0 xpack.security.enabled: tr…...

2025年1月22日(什么是扫频)

扫频&#xff08;Sweep Frequency&#xff09;是一种信号处理技术&#xff0c;通常用于系统识别、频率响应分析和特性测试。它通过发送一个频率逐渐变化的信号&#xff08;通常是正弦波或线性调频信号&#xff09;来激励系统&#xff0c;然后测量系统的响应。这种方法可以帮助我…...

mybatis是什么?有什么作用?mybatis的简单使用

mybatis是什么&#xff1f; MyBatis 是一个持久层框架。 有什么作用&#xff1f; 简化了对数据库数据的操作。 如何简化数据操作的&#xff1f; MyBatis 通过提供 SQL 映射、动态 SQL、结果映射、事务管理等功能&#xff0c;我们直接去用就可以了。 怎么使用&#xff1f;&…...

webpack 打包自己的--windows

第一步安装node 1、安装nodejs:https://nodejs.org/zh-cn/download/releases/ 一、Window系统配置&#xff1a; 打开命令窗口,进入当前工程目录 npm配置淘宝镜像:npm config set registry http://registry.npm.taobao.org/ npm安装parcel-bundler:npm install -g parcel-bund…...

微服务学习-Nacos 注册中心实战

1. 注册中心的设计思路 1.1. 微服务为什么会用到注册中心&#xff1f; 服务与服务之间调用需要有服务发现功能&#xff1b;例如订单服务调用库存服务&#xff0c;库存服务如果有多个&#xff0c;订单服务到底调用那个库存服务呢&#xff08;负载均衡器&#xff09;&#xff0…...

MySQL数据库 - 语法知识

一 数据模型 1 关系型数据库管理系统&#xff08;RDBMS&#xff09; 概念&#xff1a;建立在关系模型基础上&#xff0c;有多张相互连接的二维表组成的数据库。 特点&#xff1a; 使用表存储数据&#xff0c;格式统一&#xff0c;便于维护。使用SQL语言操作&#xff0c;标准…...

Zookeeper(28)Zookeeper的线性化写入和顺序一致性读是什么?

Zookeeper 是一个分布式协调服务&#xff0c;它在设计上提供了强一致性的保证&#xff0c;其中包括线性化写入和顺序一致性读。这两种一致性模型确保了在分布式系统中数据的一致性和操作的确定性。 线性化写入&#xff08;Linearizable Writes&#xff09; 线性化写入保证在任…...