剑指offer 字符串 持续更新中...

devtools/2025/2/6 20:16:35/

文章目录

  • 1. 替换空格
    • 1.1 题目描述
    • 1.2 从前向后替换空格
    • 1.3 从后向前替换空格

持续更新中…

1. 替换空格

替换空格

1.1 题目描述

题目描述:将一个字符串s中的每个空格替换成“%20”。

示例

输入:"We Are Happy"
返回:"We%20Are%20Happy"

1.2 从前向后替换空格

时间复杂度是O(n^2)

#include <string>
class Solution {std::string res;        // 要返回的字符串int n, blank_cnt;       // res的长度, 空格的个数public:string replaceSpace(string s) {res = s;blank_cnt = countBlank(s);res.resize(s.size() + blank_cnt * 2);n = res.size();for (int i = 0; i < n; ++i) {if (res[i] == ' ') {moveStr(i);res[i]     = '%';res[i + 1] = '2';res[i + 2] = '0';}}return res;}// 从pos+1开始,将每个字符向后移动两次void moveStr(int pos) {for (int i = n; i >= pos + 1; --i) {res[i + 2] = res[i];}}// 得到空格的个数int countBlank(string s) {int cnt = 0;for (int i = 0; i < s.size(); ++i)if (res[i] == ' ')cnt++;return cnt;}
};

1.3 从后向前替换空格

时间复杂度是O(n)

#include <cstddef>
#include <string>
#include <type_traits>
class Solution {std::string res;        // 要返回的字符串size_t n, blank_cnt;    // res的长度, 空格的个数int left, right;        // 左右指针public:string replaceSpace(string s) {res = s;blank_cnt = countBlank(s);res.resize(s.size() + blank_cnt * 2);n = res.size();left = s.size(), right = n;while (left < right) {if (res[left] == ' ') {left--;res[right--] = '0';res[right--] = '2';res[right--] = '%';} else {res[right] = res[left];right--, left--;}if (left == right || left < 0)    break;}std::cout << res;return res;}// 得到空格的个数int countBlank(string s) {int cnt = 0;for (int i = 0; i < s.size(); ++i)if (res[i] == ' ')cnt++;return cnt;}
};

这题88. 合并两个有序数组 - 力扣(LeetCode)与之类似,我们可以得到一个结论:合并两个字符串(包括数组),如果从前往后复制,可能重复移动,那么就可以考虑从后往前复制


http://www.ppmy.cn/devtools/156609.html

相关文章

STM32使用VScode开发

文章目录 Makefile形式创建项目新建stm项目下载stm32cubemx新建项目IED makefile保存到本地arm gcc是编译的工具链G++配置编译Cmake +vscode +MSYS2方式bilibiliMSYS2 统一环境配置mingw32-make -> makewindows环境变量Cmake CmakeListnijia 编译输出elfCMAKE_GENERATOR查询…

入行FPGA设计工程师需要提前学习哪些内容?

FPGA作为一种灵活可编程的硬件平台&#xff0c;广泛应用于嵌入式系统、通信、数据处理等领域。很多人选择转行FPGA设计工程师&#xff0c;但对于新手来说&#xff0c;可能在学习过程中会遇到一些迷茫和困惑。为了帮助大家更好地准备&#xff0c;本文将详细介绍入行FPGA设计工程…

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)

今天小李哥将开启全新的技术分享系列&#xff0c;为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测&#xff0c;到2025年全球 AI 安全解决方案市场规模将突破200亿美元&#xff0c;年复合增长率超过30%&#xff0c;而Gartn…

python 使用Whisper模型进行语音翻译

目录 一、Whisper 是什么? 二、Whisper 的基本命令行用法 三、代码实践 四、是否保留Token标记 五、翻译长度问题 六、性能分析 一、Whisper 是什么? Whisper 是由 OpenAI 开源的一个自动语音识别(Automatic Speech Recognition, ASR)系统。它的主要特点是: 多语言…

Resnet 改进:尝试在不同位置加入Transform模块

目录 1. TransformerBlock 2. resnet 3. 替换部分卷积层 4. 在特定位置插入Transformer模块 5. 使用Transformer全局特征提取器 6. 其他 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. TransformerBlock TransformerBlock是Transfo…

Mybatis之常用动态Sql语句

数据库结构、实体类 public class Youth {private Integer id;private String username;private Date birthday;private Character sex;private String address;private Integer age;public Youth(Integer id, String username, Date birthday, Character sex, String address)…

深入核心:一步步手撕Tomcat搭建自己的Web服务器

介绍&#xff1a; servlet&#xff1a;处理 http 请求 tomcat&#xff1a;服务器 Servlet servlet 接口&#xff1a; 定义 Servlet 声明周期初始化&#xff1a;init服务&#xff1a;service销毁&#xff1a;destory 继承链&#xff1a; Tomcat Tomcat 和 servlet 原理&#x…

C++的 I/O 流

本文把复杂的基类和派生类的作用和关系捋出来&#xff0c;具体的接口请参考相关文档 C的 I/O 流相关的类&#xff0c;继承关系如下图所示 https://zh.cppreference.com/w/cpp/io I / O 的概念&#xff1a;内存和外设进行数据交互称为 I / O &#xff0c;例如&#xff1a;把数…