剑指Offer-5:替换字符串的空格
2017-12-13 15:26
471 查看
题目:
请实现一个函数,将一个字符串中的空格替换成“%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; }
相关文章推荐
- 剑指Offer之字符串空格替换问题
- 剑指offer面试题4:替换字符串中的空格
- java 剑指offer 第二题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- C++笔试题(剑指offer 面试题4 替换字符串中的空格)
- [剑指offer][面试题04]实现一个函数,将字符串中的空格替换为“ ”.例如输入“we are happy.”,输出"we are happy.".
- 剑指offer 替换字符串中的空格
- 剑指offer——题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- 【剑指offer】字符串的空格替换
- 【剑指offer】将空格替换制定字符串
- 剑指offer-04:字符串替换空格
- 剑指offer-字符串空格替换为“ ”
- 剑指offer 面试题4—替换字符串中空格
- 剑指offer剖析__空格替换字符串问题
- 剑指offer 1,输入一个字符串,将字符串的空格替换成%20
- 【剑指offer】字符串中空格的替换
- 【剑指offer】2.3.2 字符串——面试题4:替换空格
- 【剑指offer】替换字符串中的空格
- 剑指offer 4题 【字符串】替换空格
- 剑指offer - 将字符串中空格替换为20%
- 【剑指offer】替换字符串中的空格