剑指Offer-5:替换字符串的空格
来源:互联网 发布:iphone看片软件 编辑:程序博客网 时间:2024/05/15 02:36
题目:
请实现一个函数,将一个字符串中的空格替换成“%20”。
Example:
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
问题解析:
一个字符用3个字符替换,注意字符串覆盖的问题。
链接:
剑指Offer(第2版):P51
思路标签:
算法:双指针
从前向后——由后到前
解答:
1. C++
- 从前向后遍历寻找到空格,并移动后面元素再进行替换的想法很简单,但是时间复杂度高,每一个空格后面的元素都要向后移动,会涉及后面的元素存在多次移动的问题,时间复杂度为O(n);
- 但是如果换一种思路,先规定好字符数组可允许访问的长度。统计原字符串中所拥有的空格数。使用两个指针P1和P2,P1指向原字符串的末尾,P2指向替换后的字符串的末尾。从后向前复制字符串,遇到空格,P2从后向前添加符号,移动3个单位,P1则向前移动1个单位。当P1和P2相遇时则说明所有空格已经替换。
class Solution {public: void replaceSpace(char *str, int length) { if (str == nullptr || length <= 0) return; int originalLength = 0; int numberOfBlank = 0; int i = 0; while (str[i] != '\0') { ++originalLength; if (str[i] == ' ') ++numberOfBlank; ++i; } int newLength = originalLength + 2 * numberOfBlank; if (newLength > length) return; int indexOfOriginal = originalLength; int indexOfNew = newLength; while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) { if (str[indexOfOriginal] == ' ') { str[indexOfNew--] = '0'; str[indexOfNew--] = '2'; str[indexOfNew--] = '%'; } else { str[indexOfNew--] = str[indexOfOriginal]; } --indexOfOriginal; } return; }};
测试样例:
void main() { Solution solution; char strings[] = "We are happy."; solution.replaceSpace(strings, 20); cout << strings <<endl; return;}
阅读全文
0 0
- 剑指Offer-5:替换字符串的空格
- 【剑指offer】字符串的空格替换
- 【剑指offer】字符串中空格的替换
- 剑指offer系列之2:字符串空格的替换
- 剑指offer--空格的替换
- 【剑指offer】替换字符串中的空格_04
- 【剑指offer】替换字符串中的空格
- 剑指offer之替换字符串中的空格
- 《剑指offer》:[9]字符串中替换空格
- 剑指Offer之字符串空格替换问题
- 剑指offer 4题 【字符串】替换空格
- 剑指offer——字符串空格替换
- 字符串(替换空格-剑指offer!!!)
- 【剑指offer】将空格替换制定字符串
- 剑指offer-字符串空格替换为“ ”
- 剑指offer:字符串(替换空格)
- 剑指offer-04:字符串替换空格
- [剑指offer]替换空格
- 深入理解 JavaScript 异步系列(5)—— async await
- 快速搭建基于beanstalk的php消息队列服务
- Android开发java jdk环境变量配置
- pandas中apply函数的用法
- 文章标题
- 剑指Offer-5:替换字符串的空格
- 数据库中字段类型nvarchar和varchar的区别
- Oracle 11g 中 Direct path reads 特性 说明
- 数据结构实验之查找四:二分查找
- 润乾报表参数不同展现报表不同
- 表白墙源码 [详细说明版]
- 判断线程池中的线程是否全部执行完毕
- 剑指offer—滑动窗口的最大值
- Boost 智能指针