剑指Offer的学习笔记(C#篇)-- 替换空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
一 . 自己的想法
老实说,貌似直接可以实现。。代码如下:
class Solution { public string replaceSpace(string str) { return str.Replace(" ","%20"); } }
二 . 其他
使用两个指针,方法借鉴于Edison Chou。
先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。
以前面的字符串"We arehappy."为例,"We are happy."这个字符串的长度是14(包括结尾符号'\0'),里面有两个空格,因此替换之后字符串的长度是18。从字符串的后面开始复制和替换。准备两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾。接下来向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止。接着向前复制,直到碰到第二、三或第n个空格。时间复杂度为O(n),实现方法如下图:
代码实现:
public static void ReplaceBlank(char[] target, int maxLength) { if (target == null || maxLength <= 0) { return; } // originalLength 为字符串target的实际长度 int originalLength = 0; int blankCount = 0; int i = 0; while (target[i] != '\0') { originalLength++; // 计算空格数量 if (target[i] == ' ') { blankCount++; } i++; } // newLength 为把空格替换成'%20'之后的长度 int newLength = originalLength + 2 * blankCount; if (newLength > maxLength) { return; } // 设置两个指针,一个指向原始字符串的末尾,另一个指向替换之后的字符串的末尾 int indexOfOriginal = originalLength; int indexOfNew = newLength; while (indexOfOriginal >= 0 && indexOfNew >= 0) { if (target[indexOfOriginal] == ' ') { target[indexOfNew--] = '0'; target[indexOfNew--] = '2'; target[indexOfNew--] = '%'; } else { target[indexOfNew--] = target[indexOfOriginal]; } indexOfOriginal--; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构